{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2.3 高斯分布"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "高斯分布，又叫正态分布，是连续变量经常使用的一个分布模型，一维的高斯分布如下：\n",
    "\n",
    "$$\n",
    "\\mathcal{N}\\left(x\\left|~\\mu,\\sigma^2\\right.\\right) = \\frac{1}{(2\\pi\\sigma^2)^{1/2}} \\exp\\left\\{-\\frac{1}{2\\sigma^2}(x-\\mu)^2\\right\\}\n",
    "$$\n",
    "\n",
    "其中 $\\mu$ 是均值，$\\sigma$ 是方差。\n",
    "\n",
    "$D$-维的高斯分布如下：\n",
    "\n",
    "$$\n",
    "\\mathcal{N}\\left(\\mathbf x\\left|~\\mathbf{\\mu, \\Sigma}\\right.\\right) = \\frac{1}{(2\\pi)^{D/2}} \\frac{1}{|\\mathbf\\Sigma|^{1/2}} \\exp \\left\\{-\\frac{1}{2}(\\mathbf x - \\mathbf \\mu)^\\top\\mathbf\\Sigma^{-1}(\\mathbf x - \\mathbf \\mu)\\right\\}\n",
    "$$\n",
    "\n",
    "其中，$D$ 维向量 $\\mathbf \\mu$ 是均值，$D\\times D$ 矩阵 $\\mathbf\\Sigma$ 是方差，$|\\mathbf\\Sigma|$ 是其行列式。\n",
    "\n",
    "之前我们已经看到，在均值和方差固定时，高斯函数是熵最大的连续分布，因此高斯分布的应用十分广泛。\n",
    "\n",
    "而中心极限定理告诉我们，对于某个分布一组样本 $x_1, \\dots, x_N$，他们的均值 $(x_1+\\dots+x_N)/N$ 的分布会随着 $N$ 的增大而越来越接近一个高斯分布。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### 验证高斯分布"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面，我们来验证高斯分布是一个概率分布。\n",
    "\n",
    "考虑高斯分布的结构中跟 $\\mathbf x$ 有关的这个二次型：\n",
    "\n",
    "$$\n",
    "\\Delta^2 = (\\mathbf x - \\mathbf \\mu)^\\top\\mathbf\\Sigma^{-1}(\\mathbf x - \\mathbf \\mu)\n",
    "$$\n",
    "\n",
    "这里的 $\\Delta$ 叫做 $\\mathbf \\mu$ 和 $\\mathbf x$ 的马氏距离（Mahalanobis distance），当 $\\mathbf \\Sigma$ 是单位矩阵的时候为欧氏距离。\n",
    "\n",
    "在 $\\Delta^2$ 相等的地方，高斯分布的概率密度也相等。\n",
    "\n",
    "不失一般性，我们只需要考虑 $\\mathbf\\Sigma$ 是对称的情况。\n",
    "\n",
    "事实上，如果 $\\mathbf\\Sigma$ 不对称，考虑其逆矩阵 $\\mathbf\\Lambda$，它总可以写成一个对称矩阵和反对称矩阵的形式：\n",
    "\n",
    "$$\\mathbf\\Lambda = \\mathbf\\Lambda^S + \\mathbf\\Lambda^A =\\frac{\\mathbf{\\Lambda + \\Lambda^\\top}}{2} + \\frac{\\mathbf{\\Lambda - \\Lambda^\\top}}{2}$$\n",
    "\n",
    "而这个反对称的矩阵的对角线均为 0，从而它的二次型为 $0$ 因此，我们有：\n",
    "\n",
    "$$\n",
    "(\\mathbf x - \\mathbf \\mu)^\\top\\mathbf\\Lambda(\\mathbf x - \\mathbf \\mu) = (\\mathbf x - \\mathbf \\mu)^\\top\\mathbf\\Lambda^S(\\mathbf x - \\mathbf \\mu)\n",
    "$$\n",
    "\n",
    "所以 $\\mathbf\\Lambda$ 可以等价于 $\\mathbf\\Lambda^S$，而对称矩阵的逆矩阵也是对称的，因此 只需要考虑 $\\mathbf\\Sigma$ 是对称的情况。\n",
    "\n",
    "对于实对称矩阵，可以找到一组正交的特征向量使得：\n",
    "\n",
    "$$\n",
    "\\mathbf{\\Sigma u}_i = \\lambda_i,\\lambda_i\\geq=0 \\mathbf u_i, \\mathbf u_i^\\top\\mathbf u_j = I_{ij}， i,j=1,\\dots,D, \n",
    "$$\n",
    "\n",
    "其中 $I_{ij}$ 表示单位矩阵的第 $i$ 行 $j$ 列的元素：\n",
    "\n",
    "$$\n",
    "I_{ij} = \\left\\{\\begin{align}\n",
    "1, &~i=j \\\\ 0, &~i \\neq j\n",
    "\\end{align}\\right.\n",
    "$$\n",
    "\n",
    "从而 $\\mathbf\\Sigma$ 可以表示为\n",
    "\n",
    "$$\n",
    "\\mathbf\\Sigma = \\sum_{i=1}^D \\lambda_i \\mathbf u_i\\mathbf u_i^\\top = \\mathbf{U\\Lambda U}^\\top\n",
    "$$\n",
    "\n",
    "其中 $\\Lambda =\\text{diag}(\\lambda_1, \\dots,\\lambda_D)$ 为对角阵，$\\mathbf U$ 是 $u_1,\\dots,u_D$ 按列拼成的正交矩阵 $\\mathbf U^\\top\\mathbf U = \\mathbf U\\mathbf U^\\top = \\mathbf I$。\n",
    "\n",
    "由正交性：\n",
    "\n",
    "$$\n",
    "\\mathbf\\Sigma^{-1} = (\\mathbf{U\\Lambda U}^\\top)^{-1} = (\\mathbf U^\\top)^{-1}\\mathbf\\Lambda^{-1} \\mathbf U^{-1} = \\mathbf U \\mathbf\\Lambda^{-1} \\mathbf U^\\top = \\sum_{i=1}^D \\frac{1}{\\lambda_i} \\mathbf u_i\\mathbf u_i^\\top\n",
    "$$\n",
    "\n",
    "令 $y_i=\\mathbf u_i^\\top (\\mathbf{x-\\mu})$，则\n",
    "\n",
    "$$\n",
    "\\Delta^2 = \\sum_{i=1}^D \\frac{y_i^2}{\\lambda_i}\n",
    "$$\n",
    "\n",
    "写成向量形式：\n",
    "\n",
    "$$\n",
    "\\mathbf y = \\mathbf{U}^\\top\\mathbf{(x-\\mu)}\n",
    "$$\n",
    "\n",
    "因此，马氏距离相当于将 $\\mathbf{x}$ 做平移变换后，再在 $\\mathbf u_i$ 方向上作了一个大小为 $\\lambda_i^{1/2}$ 的尺度变换。\n",
    "\n",
    "为了满足高斯分布定义的合法性，需要使得所有的 $\\lambda_i$ 均大于 0，即 $\\mathbf\\Sigma$ 是正定的。\n",
    "\n",
    "考虑新的坐标系下的高斯分布形式，由 $\\mathbf U$ 的正交性，我们有\n",
    "\n",
    "$$\n",
    "\\mathbf x = \\mathbf{U} \\mathbf{y} + \\mu\n",
    "$$\n",
    "\n",
    "因此 $\\mathbf x$ 对 $\\mathbf y$ 的雅克比矩阵为：\n",
    "\n",
    "$$\n",
    "J_{ij} = \\frac{\\partial x_i}{\\partial y_j} = U_{ij}\n",
    "$$\n",
    "\n",
    "因此其行列式的绝对值为 1：\n",
    "\n",
    "$$\n",
    "|\\mathbf J|^2 = \\left|\\mathbf U\\right|^2 = \\left|\\mathbf U\\right|\\left|\\mathbf U^\\top\\right| = \\left|\\mathbf U\\right|\\left|\\mathbf U^\\top\\right| = |\\mathbf I| = 1\n",
    "$$\n",
    "\n",
    "另一方面，矩阵 $\\mathbf\\Sigma$ 的行列式可以成特征值的乘积：\n",
    "\n",
    "$$\n",
    "|\\mathbf\\Sigma| = \\prod_{j=1}^D \\lambda_j\n",
    "$$\n",
    "\n",
    "所以在新的坐标系下的分布为：\n",
    "\n",
    "$$\n",
    "p(\\mathbf y) = p(\\mathbf x)|\\mathbf J|=\\prod_{j=1}^D \\frac{1}{\\lambda_j^{1/2}}\\exp\\left(-\\frac{y_j^2}{2\\lambda_j}\\right)\n",
    "$$\n",
    "\n",
    "即 $D$ 个独立的单变量高斯分布的乘积。\n",
    "\n",
    "之前我们证明过单变量高斯分布的积分是 1，因此：\n",
    "\n",
    "$$\n",
    "\\int p(\\mathbf y)\\mathbf y = \\prod_{j=1}^D \\int_{-\\infty}^{\\infty} \\frac{1}{\\lambda_j^{1/2}}\\exp\\left(-\\frac{y_j^2}{2\\lambda_j}\\right) dy_j = 1\n",
    "$$\n",
    "\n",
    "所以多维高斯分布的确是归一化的，非负性显然，所以它是一个概率分布。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f742ef3a890>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import scipy as sp\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "%matplotlib inline\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "\n",
    "tt = np.linspace(-np.pi, np.pi, 100)\n",
    "\n",
    "xx = 1 * np.sin(tt)\n",
    "yy = 2 * np.cos(tt)\n",
    "\n",
    "ax.plot(- xx * np.sin(np.pi/6) - yy * np.cos(np.pi/6), \n",
    "        xx * np.cos(np.pi/6) - yy * np.sin(np.pi/6), 'r')\n",
    "\n",
    "ax.set_xlim([-3, 3])\n",
    "ax.set_ylim([-2, 2])\n",
    "ax.set_xlabel(r\"$x_1$\", fontsize=\"xx-large\")\n",
    "ax.set_ylabel(r\"$x_2$\", fontsize=\"xx-large\")\n",
    "\n",
    "ax.set_xticks([])\n",
    "ax.set_yticks([])\n",
    "\n",
    "ax.text(0, 0.3, r\"$\\mathbf{\\mu}$\", fontsize=\"xx-large\")\n",
    "\n",
    "ax.annotate(r\"$y_1$\",\n",
    "            fontsize=\"xx-large\",\n",
    "            xy=(-2.5, -2.5 / np.sqrt(3)), xycoords='data',\n",
    "            xytext=(2.5, 2.5 / np.sqrt(3)), textcoords='data',\n",
    "            arrowprops=dict(arrowstyle=\"<-\",\n",
    "                            connectionstyle=\"arc3\",\n",
    "                            color=\"blue\"))\n",
    "ax.annotate(r\"$y_2$\",\n",
    "            fontsize=\"xx-large\",\n",
    "            xy=(1, -np.sqrt(3)), xycoords='data',\n",
    "            xytext=(-1, np.sqrt(3)), textcoords='data',\n",
    "            arrowprops=dict(arrowstyle=\"<-\",\n",
    "                            connectionstyle=\"arc3\",\n",
    "                            color=\"blue\"))\n",
    "\n",
    "ax.annotate(\"\",\n",
    "            xy=(0.55, -0.55 * np.sqrt(3)), xycoords='data',\n",
    "            xytext=(0.55 + np.sqrt(3), 1-0.55 * np.sqrt(3)), textcoords='data',\n",
    "            arrowprops=dict(arrowstyle=\"<->\",\n",
    "                            connectionstyle=\"arc3\"), \n",
    "            )\n",
    "ax.annotate(\"\",\n",
    "            xy=(-1.05*np.sqrt(3), -1.05), xycoords='data',\n",
    "            xytext=(-1.05*np.sqrt(3)-0.5, -1.05+0.5*np.sqrt(3)), textcoords='data',\n",
    "            arrowprops=dict(arrowstyle=\"<->\",\n",
    "                            connectionstyle=\"arc3\"), \n",
    "            )\n",
    "\n",
    "ax.text(-2.7, -1, r\"$\\lambda_2^{1/2}$\", fontsize=\"xx-large\")\n",
    "ax.text(1.4, -0.9, r\"$\\lambda_1^{1/2}$\", fontsize=\"xx-large\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### 均值和协方差"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "计算一阶矩即均值，令 $\\mathbf{z=x-\\mu}$：\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\mathbb E[\\mathbf x] & = \\frac{1}{(2\\pi)^{D/2}} \\frac{1}{|\\mathbf\\Sigma|^{1/2}} \\int \\exp \\left\\{-\\frac{1}{2}(\\mathbf x - \\mathbf \\mu)^\\top\\mathbf\\Sigma^{-1}(\\mathbf x - \\mathbf \\mu)\\right\\} \\mathbf x  d\\mathbf x\\\\\n",
    "& = \\frac{1}{(2\\pi)^{D/2}} \\frac{1}{|\\mathbf\\Sigma|^{1/2}} \\int \\exp \\left\\{-\\frac{1}{2}\\mathbf z^\\top\\mathbf\\Sigma^{-1}\\mathbf z\\right\\} \\mathbf{(z+\\mu)}  d\\mathbf z\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "含有 $\\mathbf{z + \\mu}$ 中 $\\mathbf z$ 的部分会消失，因为此时 $\\mathbf z$ 的部分是一个奇函数，而 $\\mathbf \\mu$ 的部分相当于它乘上一个多维高斯分布的积分，因此：\n",
    "\n",
    "$$\n",
    "\\mathbb E[\\mathbf x] = \\mu\n",
    "$$\n",
    "\n",
    "考虑二阶矩，令 $\\mathbf{z=x-\\mu}$：\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\mathbb E[\\mathbf x\\mathbf x^\\top] & = \\frac{1}{(2\\pi)^{D/2}} \\frac{1}{|\\mathbf\\Sigma|^{1/2}} \\int \\exp \\left\\{-\\frac{1}{2}(\\mathbf x - \\mathbf \\mu)^\\top\\mathbf\\Sigma^{-1}(\\mathbf x - \\mathbf \\mu)\\right\\} \\mathbf x  \\mathbf x^\\top d\\mathbf x\\\\\n",
    "& = \\frac{1}{(2\\pi)^{D/2}} \\frac{1}{|\\mathbf\\Sigma|^{1/2}} \\int \\exp \\left\\{-\\frac{1}{2}\\mathbf z^\\top\\mathbf\\Sigma^{-1}\\mathbf z\\right\\} \\mathbf{(z+\\mu)} \\mathbf{(z+\\mu)}^\\top d\\mathbf z\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "展开后面的乘积，$\\mathbf{\\mu z}^\\top$ 和 $\\mathbf{z\\mu}^\\top$ 项的积分会因为奇函数的性质消去，$\\mathbf{\\mu\\mu}^\\top$ 项是常数乘以分布，因此只剩下 $\\mathbf{\\mu\\mu}^\\top$。现在考虑 $\\mathbf{zz}^\\top$ 项：\n",
    "\n",
    "从之前的推导中，我们知道：\n",
    "\n",
    "$$\n",
    "\\mathbf{z=x-\\mu=Uy}=\\sum_{j=1}^D y_j \\mathbf u_j\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\mathbf z^\\top\\mathbf\\Sigma^{-1}\\mathbf z = \\sum_{k=1}^D \\frac{y_k^2}{\\lambda_k}\n",
    "$$\n",
    "\n",
    "其中 $y_j = \\mathbf u_j^\\top \\mathbf z$。\n",
    "\n",
    "因此我们有：\n",
    "\n",
    "\\begin{aligned}\n",
    "& \\frac{1}{(2\\pi)^{D/2}} \\frac{1}{|\\mathbf\\Sigma|^{1/2}} \\int \\exp \\left\\{-\\frac{1}{2}\\mathbf z^\\top\\mathbf\\Sigma^{-1}\\mathbf z\\right\\} \\mathbf{z} \\mathbf{z}^\\top d\\mathbf z \\\\\n",
    "= & \\frac{1}{(2\\pi)^{D/2}} \\frac{1}{|\\mathbf\\Sigma|^{1/2}} \\sum_{i=1}^D \\sum_{j=1}^D \\int  \\exp \\left\\{-\\sum_{k=1}^D \\frac{y_k^2}{2\\lambda_k}\\right\\} y_iy_j \\mathbf u_i \\mathbf u_j^\\top d\\mathbf y\n",
    "\\end{aligned}\n",
    "\n",
    "当 $i \\neq j$ 时，奇函数的性质使得积分为 0，所以只有 $i = j$ 的积分项才能保留，因此：\n",
    "\n",
    "$$\n",
    "\\mathbb E[\\mathbf{zz}^\\top] = \\sum_{i=1}^D \\mathbf{u}_i \\mathbf u_i^\\top \\lambda_i = \\mathbf \\Sigma\n",
    "$$\n",
    "\n",
    "$i=j$ 时，非 $i$ 项的 $y_k$ 的积分为 1，$i$ 项的积分相当于对一个均值为 $0$，方差为 $\\lambda_i$ 的一维高斯函数求二阶矩，因此为 $0^2 + \\lambda_i = \\lambda_i$。\n",
    "\n",
    "所以二阶矩为\n",
    "\n",
    "$$\n",
    "\\mathbb E[\\mathbf{xx}^\\top] = \\mathbf{\\Sigma + \\mu\\mu}^\\top\n",
    "$$\n",
    "\n",
    "从而协方差矩阵为\n",
    "\n",
    "$$\n",
    "{\\rm cov}[{\\bf x}] = \\mathbb E[(\\bf x-\\mathbb E[\\bf x])(\\bf x-\\mathbb E[\\bf x])^\\top] = \\mathbb E[\\mathbf{xx}^\\top] - \\mathbb E[\\bf x]\\mathbb E[\\bf x]^\\top = \\bf \\Sigma\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 高斯分布的局限性"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "尽管高斯分布是一个广泛使用的模型，但是它仍然存在一定的局限性。\n",
    "\n",
    "一个 $D$ 维的高斯分布的独立参数的数量级是 $O(D^2)$ 的（协方差 $D(D+1)/2$，均值 $D$），因此随着 $D$ 的增大，参数量的增长是平方量级的，此外，求逆操作的时间复杂度也随之增大。\n",
    "\n",
    "一个解决这个问题的方法是限制协方差矩阵的形式，例如将其限制为对角形式 $\\bf \\Sigma={\\rm diag}(\\sigma_i^2)$，或者更进一步，限制为 $\\bf \\Sigma = \\sigma^2 \\bf I$，即各向同性（`isotropic`）的高斯分布。\n",
    "\n",
    "但这样做限制了高斯分布的自由度。\n",
    "\n",
    "一般高斯分布，对角线形式的高斯分布和各向同性的高斯分布的等高线如下图所示："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nYtTJYNaNAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f742a3d6cd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib.mlab import bivariate_normal\n",
    "\n",
    "x, y = np.mgrid[-1:1:.01, -1:1:.01]\n",
    "\n",
    "fig, ax = plt.subplots(1, 3, figsize=(10, 3))\n",
    "\n",
    "# 斜的椭圆\n",
    "z = bivariate_normal(x, y, sigmax=2, sigmay=1, sigmaxy=1.5)\n",
    "ax[0].contour(x, y, z, colors=\"r\", \n",
    "              levels=np.linspace(0.1*z.min() + 0.9*z.max(), z.max(), 5))\n",
    "\n",
    "ax[0].set_xticks([])\n",
    "ax[0].set_yticks([])\n",
    "\n",
    "# 坐标轴平行的椭圆\n",
    "z = bivariate_normal(x, y, sigmax=2, sigmay=1, sigmaxy=0)\n",
    "ax[1].contour(x, y, z, colors=\"r\", \n",
    "              levels=np.linspace(0.2*z.min() + 0.8*z.max(), z.max(), 5))\n",
    "\n",
    "ax[1].set_xticks([])\n",
    "ax[1].set_yticks([])\n",
    "\n",
    "# 圆\n",
    "z = bivariate_normal(x, y, sigmax=2, sigmay=2, sigmaxy=0)\n",
    "ax[2].contour(x, y, z, colors=\"r\", \n",
    "              levels=np.linspace(0.25*z.min() + 0.75*z.max(), z.max(), 5))\n",
    "\n",
    "ax[2].set_xticks([])\n",
    "ax[2].set_yticks([])\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "高斯分布的另一个问题在于他只有一个峰值（`unimodal`），所以不能很好的表示多模态（`multimodal`）的分布。之后我们可以看到，这个问题可以通过引入隐变量来解决。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.3.1 条件高斯分布"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "高斯分布的一个重要性质是如果两组变量的联合分布是高斯分布，那么其中一组相对于另一组的条件分布也是高斯分布，每组变量的边缘分布也是高斯的。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 基本设定"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "考虑 $D$ 维的高斯分布 $p(\\mathbf x)= \\cal N(\\bf x~|~\\bf{\\mu,\\Sigma})$，将其分成两组变量 ${\\bf x}_a, {\\bf x}_b$。不失一般性，我们假设 ${\\bf x}_a$ 是 $\\bf x$ 的前 $M$ 个分量，${\\bf x}_b$ 是 $\\bf x$ 的后 $D-M$ 个分量，即\n",
    "\n",
    "$$\n",
    "{\\bf x} = \\begin{pmatrix}\n",
    "{\\bf x}_a \\\\\n",
    "{\\bf x}_b\n",
    "\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "对应的均值和协方差矩阵可以写为：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "{\\bf \\mu} & = \\begin{pmatrix}\n",
    "{\\bf \\mu}_a \\\\\n",
    "{\\bf \\mu}_b\n",
    "\\end{pmatrix} \\\\\n",
    "{\\bf \\Sigma} & = \\begin{pmatrix}\n",
    "{\\bf \\Sigma}_{aa} & {\\bf \\Sigma}_{ab} \\\\\n",
    "{\\bf \\Sigma}_{ba} & {\\bf \\Sigma}_{bb} \n",
    "\\end{pmatrix}\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "由 ${\\bf\\Sigma = \\Sigma}^{\\text T}$，我们可以知道 ${\\bf \\Sigma}_{aa}, {\\bf \\Sigma}_{bb}$ 是对称的，且 ${\\bf \\Sigma}_{ab}={\\bf \\Sigma}_{ba}^\\top$。\n",
    "\n",
    "为了方便，我们使用协方差的逆矩阵，或者叫精确度矩阵（`precision matrix`）：\n",
    "\n",
    "$$\n",
    "{\\bf\\Lambda \\equiv \\Sigma}^{-1}\n",
    "$$\n",
    "\n",
    "它可以写成：\n",
    "\n",
    "$$\n",
    "{\\bf \\Lambda} = \\begin{pmatrix}\n",
    "{\\bf \\Lambda}_{aa} & {\\bf \\Lambda}_{ab} \\\\\n",
    "{\\bf \\Lambda}_{ba} & {\\bf \\Lambda}_{bb} \n",
    "\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "由对称性，我们有 ${\\bf \\Lambda}_{aa}, {\\bf \\Lambda}_{bb}$ 是对称的，且 ${\\bf \\Lambda}_{ab}={\\Lambda}_{ba}^\\top$。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用精确度矩阵表示"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们不从条件分布的定义出发计算，换一个角度，考虑二次型的部分：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "-\\frac{1}{2}(\\mathbf x - \\mathbf \\mu)^\\top\\mathbf\\Sigma^{-1}(\\mathbf x - \\mathbf \\mu) = \n",
    "& \n",
    "-\\frac{1}{2}(\\mathbf x_a - \\mathbf \\mu_a)^\\top\\mathbf\\Lambda_{aa}(\\mathbf x_a - \\mathbf \\mu_a) -\n",
    "\\frac{1}{2}(\\mathbf x_a - \\mathbf \\mu_a)^\\top\\mathbf\\Lambda_{ab}(\\mathbf x_b - \\mathbf \\mu_b) \n",
    "\\\\\n",
    "& - \\frac{1}{2}(\\mathbf x_b - \\mathbf \\mu_b)^\\top\\mathbf\\Lambda_{ba}(\\mathbf x_a - \\mathbf \\mu_a) -\n",
    "\\frac{1}{2}(\\mathbf x_b - \\mathbf \\mu_b)^\\top\\mathbf\\Lambda_{bb}(\\mathbf x_b - \\mathbf \\mu_b)\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "我们看到，对于 $\\mathbf x_a$ 来说，它仍然是一个二次型，因此，条件分布 $p(\\mathbf x_a|\\mathbf x_b)$ 应该是一个高斯分布。\n",
    "\n",
    "因为高斯分布由其均值和协方差完全确定，我们的目的变为计算条件分布的均值和方差。\n",
    "\n",
    "为了计算均值和方法，我们可以使用配方法，对于一个高斯分布来说，我们有：\n",
    "\n",
    "$$\n",
    "-\\frac{1}{2}(\\mathbf x - \\mathbf \\mu)^\\top\\mathbf\\Sigma^{-1}(\\mathbf x - \\mathbf \\mu) = -\\frac{1}{2}\\mathbf x^\\top \\mathbf\\Sigma^{-1} \\mathbf x + \\mathbf x^\\top \\mathbf\\Sigma^{-1} \\mathbf \\mu + {\\rm const}\n",
    "$$\n",
    "\n",
    "其中常量表示与 $\\mathbf x$ 无关的部分，另外用到了 $\\bf \\Sigma$ 的对称性。\n",
    "\n",
    "这告诉我们，$\\mathbf\\Sigma^{-1}$ 是 $\\mathbf x$ 二次项的中间部分，$\\mathbf x$ 一次项的中间部分是 $\\mathbf\\Sigma^{-1} \\mathbf \\mu$。\n",
    "\n",
    "回过头来，我们观察到二次型部分中，$\\mathbf x_a$ 的二次项为：\n",
    "\n",
    "$$\n",
    "-\\frac{1}{2}\\mathbf x_a^\\top \\mathbf\\Lambda_{aa} \\mathbf x_a\n",
    "$$\n",
    "\n",
    "我们立刻可以得到条件分布 $p(\\mathbf x_a|\\mathbf x_b)$ 的协方差矩阵为：\n",
    "$$\n",
    "\\mathbf \\Sigma_{a|b} = \\mathbf\\Lambda_{aa}^{-1}\n",
    "$$\n",
    "\n",
    "在考虑含有 $\\mathbf x_a$ 的线性部分（利用 $\\mathbf\\Lambda_{ab} = \\mathbf\\Lambda_{ba}^\\top$）：\n",
    "\n",
    "$$\n",
    "\\mathbf x_a^\\top\\{\\mathbf \\Lambda_{aa}\\mathbf\\mu_a - \\mathbf \\Lambda_{ab}(\\mathbf x_b - \\mathbf \\mu_b)\\}\n",
    "$$\n",
    "\n",
    "我们可以得到：\n",
    "\n",
    "$$\n",
    "\\mathbf \\Sigma_{a|b}^{-1}\\mathbf \\mu_{a|b} = \\mathbf \\Lambda_{aa}\\mathbf\\mu_a - \\mathbf \\Lambda_{ab}(\\mathbf x_b - \\mathbf \\mu_b)\n",
    "$$\n",
    "\n",
    "从而：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\mathbf \\mu_{a|b} & = \\mathbf \\Sigma_{a|b}\\{\\mathbf \\Lambda_{aa}\\mathbf\\mu_a - \\mathbf \\Lambda_{ab}(\\mathbf x_b - \\mathbf \\mu_b)\\} \\\\\n",
    "& = \\mathbf \\mu_a - \\mathbf\\Lambda_{aa}^{-1}\\mathbf \\Lambda_{ab}(\\mathbf x_b - \\mathbf \\mu_b)\n",
    "\\end{align}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用协方差矩阵表示"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们也可以使用协方差矩阵的分量来表示条件分布的均值和方差，首先我们使用分块矩阵的 Schur 补（`Schur complement`）来表示分块矩阵的逆：\n",
    "\n",
    "$$\n",
    "\\begin{pmatrix}\n",
    "\\bf A & \\bf B \\\\\n",
    "\\bf C & \\bf D \\\\\n",
    "\\end{pmatrix}^{-1}\n",
    "= \\begin{pmatrix}\n",
    "\\bf M & {\\bf -MBD}^{-1} \\\\\n",
    "-{\\bf D}^{-1}{\\bf CM} & {\\bf D}^{-1}+{\\bf CMBD}^{-1} \\\\\n",
    "\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "其中 $\\mathbf M =(\\mathbf{A - BD}^{-1}\\mathbf C)^{-1}$，是分块矩阵的 Schur 补。\n",
    "\n",
    "结合定义式：\n",
    "\n",
    "$$\n",
    "\\begin{pmatrix}\n",
    "{\\bf \\Sigma}_{aa} & {\\bf \\Sigma}_{ab} \\\\\n",
    "{\\bf \\Sigma}_{ba} & {\\bf \\Sigma}_{bb} \n",
    "\\end{pmatrix}^{-1} = \\begin{pmatrix}\n",
    "{\\bf \\Lambda}_{aa} & {\\bf \\Lambda}_{ab} \\\\\n",
    "{\\bf \\Lambda}_{ba} & {\\bf \\Lambda}_{bb} \n",
    "\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "我们有：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "{\\bf \\Lambda}_{aa} & = (\\mathbf{\\Sigma}_{aa} - \\mathbf\\Sigma_{ab}\\mathbf\\Sigma_{bb}^{-1}\\mathbf \\Sigma_{ba})^{-1} \\\\\n",
    "{\\bf \\Lambda}_{ab} & = -(\\mathbf{\\Sigma}_{aa} - \\mathbf\\Sigma_{ab}\\mathbf\\Sigma_{bb}^{-1}\\mathbf \\Sigma_{ba})^{-1}\\mathbf\\Sigma_{ab}\\mathbf\\Sigma_{bb}^{-1}\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "带入均值和方差的表达式，我们有：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\mathbf \\mu_{a|b} & = \\mathbf \\mu_a - \\mathbf\\Lambda_{aa}^{-1}\\mathbf \\Lambda_{ab}(\\mathbf x_b - \\mathbf \\mu_b) \\\\\n",
    "& = \\mu_a + \\mathbf\\Sigma_{ab}\\mathbf\\Sigma_{bb}^{-1} (\\mathbf x_b-\\mathbf \\mu_b) \\\\\n",
    "\\mathbf \\Sigma_{a|b} & = \\mathbf\\Lambda_{aa}^{-1} \\\\\n",
    "& = \\mathbf{\\Sigma}_{aa} - \\mathbf\\Sigma_{ab}\\mathbf\\Sigma_{bb}^{-1}\\mathbf \\Sigma_{ba} \\\\\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "可以看到，使用精确度矩阵表示形式上更简单一些。\n",
    "\n",
    "注意到，条件分布 $p(\\mathbf x_a|\\mathbf x_b)$ 的均值与 $\\mathbf x_b$ 呈线性关系，而协方差与 $\\mathbf x_a$ 独立，这表示了一个线性高斯模型。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## 2.3.2 边缘高斯分布"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "现在考虑边缘分布的形式：\n",
    "\n",
    "$$\n",
    "p(\\mathbf x_a)=\\int p(\\mathbf x_a, \\mathbf x_b) d\\mathbf x_b\n",
    "$$\n",
    "\n",
    "它也是一个高斯分布。\n",
    "\n",
    "因为是对 $\\mathbf x_b$ 的积分，我们考虑二次型中关于 $\\mathbf x_b$ 的部分：\n",
    "\n",
    "$$\n",
    "-\\frac{1}{2}\\mathbf x_b^{\\text T}\\mathbf\\Lambda_{bb}\\mathbf x_b + \\mathbf x_b^\\top\\mathbf m =\n",
    "-\\frac{1}{2} (\\mathbf x_b-\\mathbf\\Lambda^{-1}_{bb}\\mathbf m)^\\top (\\mathbf x_b-\\mathbf\\Lambda^{-1}_{bb}\\mathbf m) +\n",
    "\\frac{1}{2} \\mathbf m^\\top\\mathbf \\Lambda_{bb}^{-1}\\mathbf m\n",
    "$$\n",
    "\n",
    "其中\n",
    "\n",
    "$$\n",
    "\\mathbf m = \\mathbf\\Lambda_{bb}\\mathbf\\mu_{b}-\\mathbf\\Lambda_{ba}(\\mathbf x_a - \\mathbf\\mu_a)\n",
    "$$\n",
    "\n",
    "是一个与 $\\mathbf x_b$ 无关的项。\n",
    "\n",
    "配方之后我们发现，关于 $\\mathbf x_b$ 的二次型部分可以拆分为两部分：一个高斯分布的二次型再加上一个 跟 $\\mathbf x_b$ 无关的部分。\n",
    "\n",
    "对于高斯分布的二次型部分，积分\n",
    "\n",
    "$$\n",
    "\\int \\exp\\left\\{-\\frac{1}{2} (\\mathbf x_b-\\mathbf\\Lambda^{-1}_{bb}\\mathbf m)^\\top (\\mathbf x_b-\\mathbf\\Lambda^{-1}_{bb}\\mathbf m)\\right\\} d\\mathbf x_b\n",
    "$$\n",
    "\n",
    "是一个与 $\\mathbf x_a, \\mathbf x_b$ 无关的常数项。\n",
    "\n",
    "考虑第二部分，并加上与 $\\mathbf x_a$ 有关的项，我们有：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "& \\frac{1}{2} \\mathbf m^\\top\\mathbf \\Lambda_{bb}^{-1}\\mathbf m \n",
    "-\\frac{1}{2}\\mathbf x_a^\\top \\mathbf\\Lambda_{aa} \\mathbf x_a + \\mathbf x_a^\\top\\{\\mathbf \\Lambda_{aa}\\mathbf\\mu_a + \\mathbf \\Lambda_{ab}\\mathbf \\mu_b\\} + \\text{const} \\\\\n",
    "= & -\\frac{1}{2} \\mathbf x_a^\\top (\\mathbf\\Lambda_{aa} -  \\mathbf\\Lambda_{ba}\\mathbf\\Lambda_{bb}^{-1}\\mathbf\\Lambda_{ba})\\mathbf x_a + \\mathbf x_a^\\top (\\mathbf\\Lambda_{aa} -  \\mathbf\\Lambda_{ba}\\mathbf\\Lambda_{bb}^{-1}\\mathbf\\Lambda_{ba}) \\mathbf \\mu_a + \\text{const}\n",
    "\\end{align} \n",
    "$$\n",
    "\n",
    "从之前的讨论立即可以得到协方差矩阵：\n",
    "\n",
    "$$\n",
    "\\mathbf\\Sigma_a = (\\mathbf\\Lambda_{aa} -  \\mathbf\\Lambda_{ba}\\mathbf\\Lambda_{bb}^{-1}\\mathbf\\Lambda_{ba})^{-1}\n",
    "$$\n",
    "\n",
    "以及均值\n",
    "\n",
    "$$\n",
    "\\mathbf\\Sigma_a (\\mathbf\\Lambda_{aa} -  \\mathbf\\Lambda_{ba}\\mathbf\\Lambda_{bb}^{-1}\\mathbf\\Lambda_{ba}) \\mathbf \\mu_a = \\mathbf\\mu_a\n",
    "$$\n",
    "\n",
    "再来利用之前 `Schur` 补的结论：\n",
    "\n",
    "$$\n",
    "\\begin{pmatrix}\n",
    "\\bf A & \\bf B \\\\\n",
    "\\bf C & \\bf D \\\\\n",
    "\\end{pmatrix}^{-1}\n",
    "= \\begin{pmatrix}\n",
    "\\bf M & {\\bf -MBD}^{-1} \\\\\n",
    "-{\\bf D}^{-1}{\\bf CM} & {\\bf D}^{-1}+{\\bf CMBD}^{-1} \\\\\n",
    "\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "其中 $\\mathbf M =(\\mathbf{A - BD}^{-1}\\mathbf C)^{-1}$，是分块矩阵的 Schur 补。\n",
    "\n",
    "$$\n",
    "\\begin{pmatrix}\n",
    "{\\bf \\Lambda}_{aa} & {\\bf \\Lambda}_{ab} \\\\\n",
    "{\\bf \\Lambda}_{ba} & {\\bf \\Lambda}_{bb} \n",
    "\\end{pmatrix}^{-1} =\n",
    "\\begin{pmatrix}\n",
    "{\\bf \\Sigma}_{aa} & {\\bf \\Sigma}_{ab} \\\\\n",
    "{\\bf \\Sigma}_{ba} & {\\bf \\Sigma}_{bb} \n",
    "\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "\n",
    "我们用协方差矩阵来表示这个结果，可以得到：\n",
    "\n",
    "$$\n",
    "\\mathbf \\Sigma_{aa} = (\\mathbf\\Lambda_{aa} -  \\mathbf\\Lambda_{ba}\\mathbf\\Lambda_{bb}^{-1}\\mathbf\\Lambda_{ba})^{-1}\n",
    "$$\n",
    "\n",
    "从而：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\mathbb E[\\mathbf x_a]& = \\mathbf\\mu_a\\\\ \n",
    "{\\rm cov}[\\mathbf x_a]&=\\mathbf \\Sigma_{aa}\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "可以看到，边缘分布的均值和协方差就是原来的均值和协方差中相对应的部分。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 结论"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "已知 $p(\\mathbf x)= \\cal N(\\bf x~|~\\bf{\\mu,\\Sigma})$ 以及 $\\mathbf\\Lambda\\equiv\\mathbf\\Sigma^{-1}$ 以及\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "{\\bf x} = \\begin{pmatrix}\n",
    "{\\bf x}_a \\\\\n",
    "{\\bf x}_b\n",
    "\\end{pmatrix},~& {\\bf \\mu} = \\begin{pmatrix}\n",
    "{\\bf \\mu}_a \\\\\n",
    "{\\bf \\mu}_b\n",
    "\\end{pmatrix} \\\\\n",
    "{\\bf \\Sigma} = \\begin{pmatrix}\n",
    "{\\bf \\Sigma}_{aa} & {\\bf \\Sigma}_{ab} \\\\\n",
    "{\\bf \\Sigma}_{ba} & {\\bf \\Sigma}_{bb} \n",
    "\\end{pmatrix},~& {\\bf \\Lambda} = \\begin{pmatrix}\n",
    "{\\bf \\Lambda}_{aa} & {\\bf \\Lambda}_{ab} \\\\\n",
    "{\\bf \\Lambda}_{ba} & {\\bf \\Lambda}_{bb} \n",
    "\\end{pmatrix}\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "条件分布为：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "p(\\mathbf x_a|\\mathbf x_b) & = \\mathcal N (\\mathbf x|\\mathbf \\mu_{a|b}, \\mathbf \\Lambda_{aa}^{-1}) \\\\\n",
    "\\mathbf \\mu_{a|b} & = \\mathbf \\mu_a - \\mathbf \\Lambda_{aa}^{-1}\\mathbf \\Lambda_{ab} (\\mathbf x_b-\\mathbf \\mu_b)\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "边缘分布为：\n",
    "\n",
    "$$\n",
    "p(\\mathbf x_a)=\\mathcal N (\\mathbf x_a|\\mathbf \\mu_{a}, \\mathbf \\Sigma_{aa})\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAm8AAAEzCAYAAABnkuSZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4jff7wPH3Y+9Zo2aVFrUpSo1YsVfsBJHYpVTRpVX6\nq6r2qzWqtdWIEUREghgJSeyoWQmCGCGCRMgg43x+f6TRauWM5JzM+3Vdub4559zP57mT6+vpnc/U\nlFIIIYQQQoisIVdGJyCEEEIIIYwnxZsQQgghRBYixZsQQgghRBYixZsQQgghRBYixZsQQgghRBYi\nxZsQQgghRBaSocWbpmmrNE27r2naeT0xizRNu6pp2llN0xqmZ35CCGGsVz3PNE0rqWnaPk3TLmua\n5qlpWvGMzFEIkT1kdM/bGqBzSh9qmtYVqK6UegsYCyxNr8SEEMJEr3qefQYcUErVBLyAz9M9KyFE\ntpOhxZtSyg+I0BPSG1j3V+wJoLimaeXSIzchhDBFCs+z3sDav75fC/RJ16SEENlSRve8GVIRuP2P\n1yF/vSeEEFlBWaXUfQClVChQNoPzEUJkA5m9eBNCiOxEziMUQqRZnoxOwIAQoPI/Xlf6673/0DRN\nHopC5EBKKS2jc9DjvqZp5ZRS9zVNKw+EpRQozzAhcp7UPr8yQ/Gm/fX1Km7ABGCLpmnvAY+ThyBe\nRSl59uVEs2bNYtasWRmdhsgAmpbp6rZ/P8/cgBHAPMAe2KnvYnmG5Tzy/Mq50vL8ytDiTdO0jYAV\nUFrTtFvA10A+QCmlliuldmua1k3TtCAgGnDIuGyFECJlKTzPvge2aprmCNwEBmZchkKI7CJDizel\nlK0RMRPTIxchhEgLPc+zjumaiBAi25MFCyLLs7KyyugUhBAiVeT5JVJDyy5zLDRNU9nlZxFCGEfT\ntMy+YMFo8gwTImdJy/NLet6EEEIIIbIQKd6EEEIIIbIQKd6EEEIIIbIQKd6EEEIIIbKQzLBJrxAi\nB3j6/CkXwy5yIewCD2MekjdXXgrlLUTvWr2pVKxSRqcnhBBZhqw2FUJYTPDjYFwCXHC77Mbpe6ep\n9Vot6patS/nC5UnQJfAw9iE7A3fS9a2ufNHqC+qUrWNS+7LaVAiRVaXl+SXFmxDCrKLionA678SG\nCxsIeBCATW0betfsTftq7SmYt+B/4h8/e8wvJ39h9ZnVXP3wKrlz5Tb6XlK8CSGyKinekAefEBnt\nVuQtFp1YxJqza7B6w4oRDUbQuUZn8uXOZ9T1769+nynvTaH/O/2NvqcUb0KIrEr2eRNCZJirj64y\nwWMCjZY1AuCPMX+wfeB2etbsaXThBjC1xVQWn1xsqTSFECLbkAULQohUuRZ+jVmHZ+EZ5MmYJmO4\n9MElyhUpl+r2GpZvyO3I22bMUAghsifpeRNCmCQiNoIPd39I85XNeavUW1ybdI1v23+bpsINIG+u\nvMQlxpkpSyGEyL6k500IYZSouCjmH53P4pOLGfDOAAInBvJaodfM1n5sQix5c+c1W3tCCJFdSfEm\nhNBLKYVroCuT906mVZVWHB91nBqlapj9PhfDLlK3bF2ztyuEENmNFG9CiBRdeXSFqfumEhQexNo+\na2lXrZ3F7nUu9Bz1ytazWPtCCJFdyJw3IcR/RD6LZMreKbRc1ZLWVVpzbtw5ixZuAHuv7aV9tfYW\nvYcQQmQH0vMmhHjJ/mv7Gek2Euvq1lyacImyhcta/J4hT0K4+ugqbau2tfi9hBAiq5PiTQgBQGhU\nKJP2TOJkyElW9lqJdXXrdLv39oDt9Hi7hyxYEEIII8iwqRA5nFKKdefW0WBpA2qUqkHAhIB0LdwA\n1p1bx7D6w9L1nkIIkVVJz5sQOdidJ3eYuHsiNx7fYI/dHhq/3jjdc7j04BL3ou7JfDchsppHj6BI\nEcifP6MzyXGk502IHEindCw6sYiGSxtSv1x9To46mSGFG8CiE4sY3Xi0SQfSCyEygZ494fXXYfx4\nOHcuo7PJUaTnTYgc5n7Ufexd7Yl8HskRxyPUfK1mhuXyIPoBW/7cQuCEwAzLQQiRClFRcP48/PEH\nbNoE3brBnTugpeqcdWEi6XkTIgfZdGET9ZfWp8nrTfAZ4ZOhhRvAT8d+YsA7A9J8tJYQIp0dOwaN\nGsHbb8PMmRAfDyEhGZ1VjiE9b0LkAE+fP2XinomcuHOC3ba7aVKhSUanxKOYRyw7vYzz489ndCpC\nCFP5+ECbNknfaxo0bQqnTkGlShmbVw4hPW9CZHPH7xyn8fLG5M+dn9NjTmeKwg3g11O/0rtWbyoV\nk4e9EFnOP4s3gGbN4OTJjMsnh5GeNyGyqdj4WGZ6z2TDhQ0s7rqY/u/0z+iUXgiPDWfhiYUccTyS\n0akIIUz17BmcPg0tW/79XtOm8NNPGZdTDiPFmxDZUFB4EP2c+1GzdE3OjztPmcJlMjqll8z1nUu/\n2v0yfM6dECIVTp2C2rWhaNG/32vaFPz9QaeDXDKoZ2nyGxYiG1FKscx/GS1WtWBsk7Fs6b8l0xVu\nQeFBrDm7hq+tvs7oVIQQqfHvIVOAMmWgZEkICsqYnHIY6XkTIpuIiotilNsorjy6wuERh3mnzDsZ\nndIrfXbgM6a1nEaFohUyOhUhRGr4+MAHH/z3/aZNk+a9vf12+ueUw0jPmxDZwIX7F2i+sjmF8xbm\n6MijmbZwOxVyimN3jjGp+aSMTkUIkRoJCUnbhLRq9d/PmjVLGlIVFifFmxBZmFKKFadX0H5de6a3\nnM6q3qsokKdARqf1Som6RMZ7jGdO+zkUylsoo9MRQqTGmTNQpQqULv3fz5K3CxEWJ8OmQmRR0XHR\njHUfy7n75/AZ4UPtMrUzOiW9lpxaQpF8RbBvYJ/RqQghUisgABo2fPVnjRsnHZMVHw9586ZvXjmM\nFG8iXT1+/Jhnz56RkJCATqdDKQVA2bJlKViwYAZnl3WcuXcGWxdb3qv0HidGncj0PVl3n97lm8Pf\n4OfohybH5wiRdQUHwxtvvPqzokWhWjW4eDHp9AVhMVK8CaMtXryYK1euUK5cOS5evMg333zD2yZM\nTP34449ZsGDBf97PlSsXJ0+epHHjjDkYPStRSrHoxCK+9f2WhV0WYlvPNqNTMsoXB79gVONR1Hqt\nVkanIoRIi+Dgl/d3+7d3303aA06KN4uS4k0YZdWqVTg5OXH8+HEA9u7di7W1NZcvXyZ//vxGtRET\nE8PmzZvJmzcvuXLlQtM0AgICCA0NlcLNCFFxUUzYPYHz989zctRJqpWsltEpGeXEnRPsu7aPyxMv\nZ3QqQoi0Cg4GWz1/NFavnhQjLEqKN2GUOXPmMH369Bevu3TpQlxcHE5OTjg6OhrVRqVKlRg4cOCL\n1zqdjm3btrF8+XKz55vdXAy7SD/nfrSs3BI/Bz8K5yuc0SkZJTY+lhE7R/Bz558pmr+o4QuEEJmb\nvmFTSFrMcPBgemWTY8lqU2HQ1atXCQ4Opk6dOi+9X6dOHfbv3290O1OnTn3p9fz58xk/fjwFCmTO\n1ZGZhdtlN9qvbc+Xrb9kTe81WaZwA/j60Nc0LN+QQXUHZXQqQoi0SkiAkBCoXDnlmCpV4Nat9Msp\nh5Ket0xu4cKFxMTEcObMGWbPno2LiwtKKSIiIpg/f3665HDt2jU0TaNYsWIvvV+0aFGCTege/+eC\nhJCQEK5evfpSb554WaIukZneM1l3fh3utu40q9gso1MyybnQc6w5u4YL4y9kdCpCCHO4ezfpJAV9\nU2WkeEsX0vOWiS1atIguXbrw+eefY21tjZWVFQ4ODjx//pwNGzakWx4REREAFC78co9PkSJFXnxm\nqpkzZzJmzJg055ZdPXn+hD5b+nDk9hH+GPOHRQq35JW+lhCfGM+InSP4oeMPlC9S3mL3EUKkI0ND\npgCVKiX1ziUmpkdGOZb0vGViiYmJ1KyZdHD3nTt3aNSoERUqVGDcuHEMGzYMnU7HtGnTuHjxIvv2\n7dPb1sCBA4mKigJe/R9tTdNQSqFpGp988glWVlYvPsuTJ+n/Jrlz537pmvj4eBISEkz+uR49esTu\n3btZtWqVydfmBFcfXaXvlr68X/l9Fg9cTL7c+dLcZuDDQPZf24/nNU/O3T9H5LNIYuJjaFm5JfM6\nzqNF5RZmyPxvc3znUKFoBUY0HGHWdoUQGciY4i1/fihVCu7fhwpyBJ6lSPGWiU2ZMuXF9z4+Plhb\nWwNQsWLFF+/Xr1+f0q/a6fpfnJ2dU51HmTJJB5vrdLqX3o+OjqZEiRImt+fs7EyVKlVSnU92tu3S\nNsZ7jOcbq28Y9+64NO2JFvksko0XNrL67GruPr1L1xpdGVZ/GL9U+oWSBUqSL3c+XAJc6LW5FzsG\n7aBVlVccd5MKp++e5jf/3zgz9ozs6SZEdmJM8QZ/D51K8WYxUrxlAXFxcRw/fpw5c+b85zNvb29G\njx5t0ftXr14dpRT379+nRo0aL94PDw9/6bWxDhw4QNmyZc2ZYpaXqEvk0wOfsj1gO3vs9vBuhXdT\n3db9qPssOL6A5X8sp0O1Dnzb7ls6vtmR3Lly/yfWrr4dBfMWZOLuiZwddzYtPwIACboERu8azY+d\nfpSD54XIbgzt8ZYsuXh77z2Lp5RTSfGWSSUkJODr60u7du04duwYAE2bNgXg4cOHeHp6Ymdnx6FD\nh7C2tiYoKIjIyEgmT578yvb+OWyakpSGTStXrkzt2rUJDAzk/ffff5HfxYsXcXBwMPlnO3PmDM2b\nNzf5uuwqLDoMOxc7lFKcHnOaUgVLpaqd0KhQ5vrOZd35ddjWtcV/tL9Re8H1rtkbe1d7ImIjKFmw\nZKrunWyu71xKFyrNsPrD0tSOECITMrTHWzJZtGBxUrxlUsuXL2fq1KmEh4eza9cuSpcu/WLu2S+/\n/MJHH33EtWvXqF69OnZ2dgBUqFAhxeItLcOmACNHjuT3339n5MiRAGzZsoVSpUoxZMiQFzF79uzB\n0dGR/fv3U7du3RTbevDgAfnypX0eV3Zw4s4J+m/tz/D6w5ndbjZ5cpn+TzIqLorvfL9jqf9S7BvY\nEzAhwKRFArm0XMQlxlEwb9qOJzscfJhf/X/l9JjTMlwqRHZkyrDptWuWziZHk+Itk2rTpg02NjbM\nnTsXGxsbChcuzNSpUylUqBADBgygRIkS7Nixg27dugEQGBhIyZJp6zXRZ8qUKURGRjJmzBgqVarE\n+fPn2bdvH4UK/X2mpk6nIy4uzuAihrfeeosGDRpYLNesYsvFLUzcM5FVvVbRq2Yvk6/XKR0bzm9g\nhtcM2r3RjgvjL1CxWEXDF/5LbEIsGhoF8qR+v72ouCgcdjqwsudKGS4VIjsyZo+3ZFWqgLe35XPK\nwaR4y6Tq1q2Lk5PTi9ctXzHPIDw8nHr16gGwbt06pk2bZrF8NE1j9uzZemO6d+/Oo0ePDLb1xx9/\nmCutLClBl8D0fdNxu+LG/mH7aVi+ocltnAw5ycTdE8mdKzdb+m+hZWUj5qGk4Pid49QrVy/V1wNM\n2D2Bdm+0o/vb3dPUjhAikzJmj7dkMmxqcVK8ZWGDBg1i9erVhIaGUrFixVTNPxPpKyouisHbBvM8\n8Tn+o/1NnmP25PkTPtn/CW6X3fi+4/cMrT+UXFratmv0DPKka42uqb5+3bl1nAw5if9o/zTlIYTI\nxIwdMgUp3tKBFG9ZWKVKlZg5c2ZGpyGMdC38Gn239KV5xeb82v1X8ubOa/S1Sim2XdrGx/s+pkv1\nLgRMCKB4geJpzkkphftVd5b3SN35slcfXWXqvqkcHH4wSx3bJYQwkSnF22uvQUwMREdDYXkuWIIU\nb0Kkg2O3j2HjbMOXrb/kg6YfmDShPyw6jLHuY7n66CobbTbSumprs+V1IuQEcYlxqRp2TdQlYu9q\nz1dtvqJ+ufpmy0kIkQmZUrxpWtLcuNu3oVYtS2aVY8nxWEJYmPOfzvTa3ItVvVYxodkEkwq3bZe2\n0WBpA2qVrsXpMafNWrgBrPxjJY4NHVO1OvTHoz+SP09+JjabaNachBCZkCnFG8jQqYVJz5sQFqKU\n4jvf71j+x3KTFyaERYcxYfcELoZdxGWgi9mPrwK49/QeLgEuBEwIMPnaw8GHWXB8ASdGnUjznDsh\nRBZg7B5vyaR4syh56gphAfGJ8YzZNYbtAds5NvKYSYWb22U36v9Wn+olq3Nm7BmLFG4A84/NZ1j9\nYZQrUs6k6yJiIxi6Yyhr+6ylaomqFslNCJHJ3LyZVJAZS4o3i5KeNyHM7FHMIwZuG0iBPAXwcfCh\nSL4iRl339PlTpu2bhuc1T1wGuaRp+w9DHkQ/YM3ZNZwda9qRWDqlw9HNEZtaNnSu0dlC2QkhMhWl\nIDQUXn/d+GuqVIHDhy2XUw4nPW9CmNH5++dpuqIpTV5vgttgN6MLN/+7/jRc1pAEXQLnxp2zaOEG\n8L3f9wyuM5jKxY3YcPMf5vrOJTQqlB86/WChzIQQmU7y0YpFjHueAdLzZmHS8yaEmXhc8WDEzhEs\n7LIQ23rGzQ3RKR2LTyxmju8cfu3+K/3f6W/hLOHOkzusObuGix9cNOm6g9cPsuTUEvzH+JM/jxEb\ndQohsofQUChfPmkVqbGqVEkaahUWIcWbEGmklOLHoz+y8MRC3Aa7GT1H7WHMQ4btGEZEbARHRx6l\nRqkaFs40yfT90xn/7niTjrG69/Qew3YMY22ftXL8lRA5TXLxZorKleHOnaQhVznr2Oxk2FSINIhP\njMdhpwNb/tzC8ZHHjS7c/G750XhZY+qXrY+vg2+6FW6Hgw9z7PYxZrSZYfQ1CboEBm8fzLh3x9Gp\neicLZieEyJTu3ze9eCtQAAoWhMePLZNTDifFmxCpFBEbQbeN3XgY8xCfET5GzR/TKR3f+31PP+d+\n/Nb9N+Z1mmfSSQtpkahLZIrnFOZ1nEehvIWMvu7zA59TME9BvmzzpQWzEzldcHAw69aty+g0sp05\nc+YQFxeXtkZS0/MGUK5cUuEnzE6KNyFS4Vr4NZqvbE69svVwHexq1NFQoVGhWK+3ZvfV3fiP9k/3\nQ9yX+i+lWP5iDKwz0OhrPK54sOXPLTjZOMl+bsJiwsPD+fLLL7GzszN72/37W34eaUZ7/PgxoaGh\n3Llzh1u3bnHz5k1u3rxJbGwsAwYMYPTo0Wm7gRRvmY48jYUwkf9df1qvac3HLT7mp84/kSeX4amj\nx24fo+mKprSs3BIvey+TV3mmVWhUKLMOz2JJtyVGn6YQ8iSEUbtG4WTjROlCpS2cocjJPvvsM6ZN\nm0bu3LnN3nZ4eLjZ2zSnxYsX8+GHH/Ltt98yePBgrly5YtL1H3/8MaVKlaJChQpUqVKFN954g2rV\nqlG9enUCAgJ4++23adCgAatXr059kqGhSYWYqcqVS7pWmJ0sWBDCBNsubWO8x3hW9lxJ71q9DcYr\npfjf0f/xv2P/Y2XPlfSs2TMdsvxvDmPdxzK68WjqlK1j1DWx8bH02dKHSc0mmf1ILiH+KTAwkODg\nYBo2NH4j6+xi1apVODk5cfz4cQD27t2LtbU1ly9fJn9+41Z0x8TEsHnzZvLmzUuuXLnQNI2AgABC\nQ0Np3LgxAKNHj6ZFixYMGzaMvHlTMU0jtT1v5ctLz5uFSPEmhJGWnFzCXL+57Bu6j0avNzIYHx0X\njaObI8GPgzk1+hRVipuwO7kZuQS4EBQehHN/Z6Ov+WjvR1QvWZ3PWn1mwcyESOp5sre3z+g0MsSc\nOXOYPn36i9ddunQhLi4OJycnHB0djWqjUqVKDBz491QInU7Htm3bWL58+Yv3ihYtStOmTdmxY8dL\nsUaTYdNMR4ZNhTBAp3R8sv8TFp5YiK+Dr1GF25VHV2ixqgUF8hTg8IjDGVa4hceG85HnR/zW/Tej\n92Zbe3YtXsFerOi5IlUH1gthir1799KihWWOgMvMrl69SnBwMHXqvNwbXqdOHfbv3290O1OnTn3p\n9fz58xk/fjwFChR46f2WLVvi6uqaumSleMt0pOdNCD3iEuOwd7Un5EkIx0YeM2rul2eQJ8NdhzPb\najZjm4zNsAJIKcUHHh/Qr3Y/2lRtY9Q1frf8mL5/OodGHKJo/qIWzlBkZ/PmzeP8+fN06NCBKlWq\ncPLkSYKCgmjQoAGTJ08G4ObNmzx+/Jg333zzlW0sXLiQmJgYzpw5w+zZs3FxcUEpRUREBPPnz091\nbpZq1xTXrl1D0zSKFSv20vtFixYlODjY6HYKFiz44vuQkBCuXr36Um9esqZNmzJ37lzTE9XpICws\n9XPepHizDKVUtvhK+lGEMJ/IZ5Gq07pOqs/mPio2PtZgvE6nU/OPzlfl/1de+QT7pEOG+m08v1HV\n/qW2iomLMSr+7pO76vX/va72XN1j4czM569/9xn+/DHHV3Z6hp09e1bt3LlTeXh4qGLFiqktW7Yo\npZSKj49XxYoVUxcuXFBKKeXj46Nq1ar1yjYWLlyoAgMDlVJKrVixQpUtW1aFhISoL7/8UpUtW9bo\nXNq1a2eRdtNq48aNKleuXOrKlSsvvT9s2DBVs2bNVLXp6OioTp069crP7ty5o3Lnzq3i4uJMa/Th\nQ6VKlkxVPur4caXefTd11+YAaXl+Sc+bEK8QGhVKlw1daFGpBYu7LTa4ojQmPobRu0YT8CCA4yOP\nU7VE1XTK9NXuPb3H5L2T8bD1oGDeggbjY+Jj6L25NxOaTqBLjS7pkKHIzvz9/bG1tWXp0qU0adLk\nxTyrPHnyUKBAAXx9falbty5hYWGUKFHilW0kJiZSs2ZNAO7cuUOjRo2oUKEC48aNY9iwYanOzVC7\nOp2OadOmcfHiRfbt26e3rYEDBxL117mfSf8tfpmmaSil0DSNTz75BCsrqxef5cmT9Ez59wrb+Ph4\nEhISTP65Hj16xO7du1m1atUrPy9VqhRKKR4/fkyZMmWMbzi1Q6YgPW8WJMWbEP9yLfwa1huscWjo\nwIzWMwwOe96KvEWfzX14p8w7+Dn6mbQBriUopRjjPoaxTcbStGJTg/E6pcPe1Z6ar9Xki9ZfpEOG\nIrsbOXIkAEeOHKFt27Yv3g8LC+PBgwcULZo0JK/T6ciV69VTr6dMmfLiex8fH6ytrQGoWLFimnIz\npt369etTurThKRLOzsYvAvq35AJKp9O99H50dHSKBa2hXKpUSXlube7cuV8UkiZJa/EWFiZHZFmA\nLFgQ4h9O3z1N6zWtmd5yOl+2+dLgg873pi/vrXwP23q2rO+7PsMLN4Dlp5dzO/I2X7X9yqj4b32+\n5e7Tu6zsuVIWKAizOnr06EvF26FDh8iVKxdt2iTNwSxTpozBfdji4uI4fvz4S+2Yg752vb29zX6/\nf6tevTpKKe7/q2cqPDycGjVMPy7vwIEDlC1bNsXPHz16RJ48eXjttddMazi1e7xB0vFY+fNDZGTq\nrhcpkp43If7ifcObQdsGsbzncvrU6qM3VinFklNL+D+f/2Ntn7WZZqjxz7A/+dL7S/wc/MiXO5/B\n+L1Be1l2ehn+o/2NXo0qhDFu3LhBRETESytJt2zZQt++fV/0EFWsWJFHjx7959qEhAR8fX1p164d\nx44dA5Im3AM8fPgQT09P7OzsuH79OitXruT999/Hw8OD9957j+HDh6eYk7HtHjp0CGtra4KCgoiM\njHyxwOLf/jlsmpKUhk0rV65M7dq1CQwM5P3333+R38WLF3FwcNDb5qucOXOG5s2bp/h5eHg45VJT\nhKWl5w3+HjpNRW+i0CO1k+Uy2xfZaLKvSH/bL21XZX4oo7xveBuMjUuIU+Pdx6s6S+qooEdBlk/O\nSM8TnqvGyxqr5f7LjYq/Hn5dlf2xbKZYXJFayIKFTGvdunUqX758KiQkRCml1J49e1S1atXU3bt3\nX4qrWLHii5hkS5YsUQUKFFAxMTFq6tSpqlKlSi8++/rrr1VERISKiYlRDRo0UA8fPlRKKWVjY6Mu\nXbr0nzz+uWDBmHaDgoJeuub1119Pw29Bv/nz56tWrVq9eL1hwwZVrVo1FR0d/eK93bt3q/Lly79Y\n5JGSIkWKqOHDh6f4+fr161Xv3r1NT3LaNKW+/97065K1aqXUoUOpvz4bS8vzK3v1vMmQj0glm7++\n+KSdwdi8wK/JLyaYPrxhKfmA0wCM+etLv2rAfYDpxm0jIoQpjh49yogRI1iwYAGFChXi1q1b+Pj4\n8Prrr78UZ21tja+vL4MGDXrxXps2bbCxsWHu3LnY2NhQuHBhpk6dSqFChRgwYAAlSpTAycmJ2rVr\nU7p0aZRSBAUFUbt2bb05GdPujh076NatG5B0+kPJkiXN/8v5y5QpU4iMjGTMmDFUqlSJ8+fPs2/f\nPgoV+nv6hU6nIy4uzuAihrfeeosGDRqk+Lmvry/du6fiPOXQUKhb1/TrksmiBctIbdWX2b7IZn+1\nCsvT6XRqlvcsVX1hdaN60AIfBKo3F76pPt3/qUpITEiHDI3nfNFZvbnwTRUeE24wVqfTqQHOA9So\nnaPSITPLQnreMq369esrJycng3He3t6qb9++Jrf/008/qe//6hHy8/NTtra26tChQ+rZs2cvxf17\nqxBD/ve//6m9e/cqpZT6/PPP1erVq03OLbN5/vy5qlmzpnry5InpF3fqpNRfv49U+eADpRYtSv31\n2Vhanl+yYEHkSAm6BMZ7jGfn5Z0ccTxC9VLV9cYfvH6Qtr+3ZUbrGXzf8Xty5zL/AdqpdSPiBhN2\nT2BL/y2ULGi4l+B7v++5HnGdxd0Wp0N2Iid68uQJf/75J82aNTMYa2VlxbNnz7h69apJ9xgyZAh3\n795l79693Lhxg2LFinHz5k2jzwRNyaBBgzhx4gRr166lYsWKqZp/ltmsW7cOOzu7F6t8TZLWOW9y\nvqllpLbqy2xfZLO/WoXlRD2PUj039lTW663Vk2eG/xJd7r9clfuxnPK67pUO2ZkmNj5WNVnWRP18\n7Gej4rdc3KKq/FxFhTwJMRycBSA9b5nSnj17VIkSJYyODw4OVoMGDVI6nc7suVhZWZm9zawkNDRU\n9enTx/TNeZOVKaNUaGjqE1i2TKlRWb+X3xLS8vySnjeRozyKeUSHdR0oVbAU7kPc9R4BpVM6Zhyc\nwbwj8/BlOq26AAAgAElEQVR18KVdNcPz4dLblL1TeKPEG0xu/urVcP904f4FJuyewM7BO6lQtEI6\nZCdyoo0bNzJp0iSeP3+OnZ0d0dHRBq+pWrUq06ZNY8mSJWbPp1SpUmZvMyuZN28ey5YtI2/evKZf\nHB8PERFg6vYi/1SuXFLvnTArLan4y/o0TVPZ5WcRlnHz8U26OHWh59s9mddxnt49zZ4lPGP4juHc\neXIH18GulC2c8v5Jhjx5/oTrEde5+fgmb5R4gwblU55UbAqn80584/MNJ0edpHiB4npj7z69S4tV\nLZjbYS629WzNcv/M4K8d7LPFSiV5holM5+5daNIE7t1LfRvHj8OkSXDypPnyyibS8vzKXqtNhUjB\n+fvn6ebUjektpzP5Pf29VOGx4fTe3JuKRSviZe9FgTwFTL5fXGIcuy7vYu25tXgHe/NGiTeoUrwK\nJ0NOsqnfJjq+2TG1PwoAVx5d4SPPjzgw7IDBwi06LpruG7szrsm4bFW4CSEsLC0b9CaT1aYWIcWb\nyPaO3DqCjbMNi7osYlDdQXpjr0dcp/vG7nR/qzs/dPqBXJppMwt0Ssfmi5v5yvsrKhWrhENDB5xs\nnF4Mz/re9KXbxm6ETQsz6szRV4mKi2LA1gF8Y/WNwV685KOv6perz2etPkvV/YQQOVRaFyvA38Wb\nkiOyzEmKN5GtuV12Y5TbKDbYbMC6urXe2D/u/UHPTT35otUXTGg2weR7HQ4+zEeeH5Evdz5W9VqF\n1RtW/4l5t8K7xCfGp/o0A6UUjjsdafJ6E8a9O85g7MeeH/Mw5iFONk5y9JUQwjT376e9561QIciX\nD548geL6RwmE8aR4E9nW+nPr+eTAJ+y22827Fd7VG7vv2j6GugxlWY9l9K3d16T73I68zfT90zl2\n5xg/dvqRAe8MSLFQuhl5k8rFK5vco5fsl5O/EBQexNGRRw0WY4tOLOLA9QP4OfrJ0VdCCNOZo3iD\nvxctSPFmNrLaVGRLPx/7mRleMzg4/KDBwu33s78zbMcwXAa5mFS46ZSO3079RuPljXm79NsETAhg\nYJ2BeouqA9cP0LRCU6Pv8U/eN7z51vdbtg7YanAe3o6AHfxw9Afcbd0pUUDOFBRCpMKDB1CmTNrb\nkXlvZic9byJbUUrxpdeXuAS6cMTxCJWLV9Yb+63Pt6w+u5rDIw5T67VaRt/n5uObjNg5gtj4WA6P\nOMw7Zd4x6ro1Z9cwt8Nco++T7EbEDYZsH8KmfpsMbih85NYRxriPYa/dXt4o8YbJ9xJCCCCpeKtf\nP+3tSPFmdtLzJrINndLx4Z4P2RO0B18HX72FW4IugbHuY9kRuINjI48ZXbgppVh/bj1NVzSlS/Uu\nHHE8YnThduLOCR5EP6BDtQ5GxSeLjoumn3M/Pn3/U9pXa683Nig8iH7O/Vjfdz1NKjQx6T5CCPGS\nsDDpecukpOdNZAvxifHYu9oT8jQEb3tvvdtnRMVFMXDrQBSKwyMO692o958iYiMY4z6GwIeBeA71\npNHrjYzOTynFJwc+YWbbmSYdraVTOoa7DqdeuXp89N5HemMjn0XSc1NPZlnNokuNLkbfQwghXslc\nw6bly8tGvWYmPW8iy3uW8Ix+zv148vwJe+326i3cwqLDsPrdigpFK+A22M3owu3o7aM0WtaICkUq\ncGr0KZMKNwCPqx48jHnIiIYjTLpupvdMwqLDWN5jud65dAm6BGxdbOlQrYPBVahCCGEUcxVvZcok\ntSXMRnreRJb29PlTem/uTZnCZVjfdz35cudLMTYoPIiuTl0ZUncIs61mG7V1hk7pmOs7l8UnF7Os\nxzJ61+ptco7PE54zxXMKC7ssJE8u4//Jbbm4hQ3nN3By9Em9q0WVUny4+0MSdAn83Plnk/MTQoj/\nUEqKt0xMijeRZYXHhtNlQxcalW/Er91/1Tsc6X/Xn56bejLbajZjmowxqv0H0Q8YtmMY0fHRnB5z\nmorFKqYqz/nH5vNOmXfo9lY3o6/5494fTNwzkf3D9hs8muuXk7/ge8uXoyOPkjd3Ks4vFEKIf4uO\nhly5oHDhtLclxZvZybCpyJLuR92n/dr2tKrSiqU9luot3A5cP0A3p24s7b7U6MLtVMgp3l3xLg3K\nNcBruFeqC7cbETeYf2w+CzovMPqae0/v0XdLX37r/hsNyzfUG+t+xZ3v/L5j15BdFMtfLFU5CiHE\nf5hrsQJI8WYB0vMmspzbkbfpuL4jtnVtmdl2pt7hz00XNvGR50dsH7id1lVbG2xbKcWKP1Yww2sG\ny3osw6a2Tarz1Ckdjm6OfPr+p1QrWc2oa54lPKPvlr6MajSK/u/01xt7MuQkDjsdcB/ibnT7Qghh\nFHMNmQKULSvFm5lJ8SaylOsR1+m4riMTm03k4xYf641dcnIJc/3mcnD4QeqWrWuw7bjEOCbvmYzP\nLR/8HPyo+VrNNOW61H8psfGxTG0x1ah4pRQfeHxAleJV+LLNl3pjb0fepu+WvqzqtYrmlZqnKU8h\nhPiPBw+Sii5zKFUq6XishATII2WHOchvUWQZAQ8CsN5gzRetvmB80/EpximlmH14NhvOb8DXwdeo\nXqnQqFD6O/enVMFSHBt5LM1DkJceXGKm90z8HP2M3hpkrt9czoaexdfBV29v4sOYh1hvsGZai2n0\nqtkrTXkKIcQrmbPnLVcuKFkSHj0yz3FbQua8iazh/P3zdFjXgTnt5+gt3JI36nW77MYRxyNGFW5n\n7p2h2YpmdHqzE66DXdNcuMUlxmHnYsd3Hb4zevNflwAXlvovxd3WncL5Up4gHBsfS69NvehdszdT\nWkxJU55CCJEic855g6S2wsLM114OJz1vItPzv+tPj409WNx1MQPqDEgxLj4xHkc3R4IfBxvcqDfZ\n9kvbGecxjt+6/2ZwjpmxvvT6ksrFKjO68Wij4k/fPc0493HssdtDhaIVUoxL1CVi72pP1RJVU3XE\nlhBCGM2cw6YgixbMTIo3kakduXWEvlv6srLXSr1DhLHxsQzcNhCd0uE51JNCeQvpbVcpxRzfOSw/\nvZy9dnvNdpSUxxUPNl3cxB9j/jBqH7kbETfotbkXy3su15uDUooJuyfwKPYRHrYeRrUthBCp9uAB\n1DU8V9hoUryZlRRvItM6HHyYAVsHsMFmA9bVrVOMS96ot3yR8qzts9bgXmfPE54z1n0sF8MucmLU\nCV4v+rpZ8g15EsJIt5FsG7iNMoUNDzc8ef6Enpt68un7n9KnVh+9sXN85+B/1x9ve28K5ClglnyF\nECJF5pzzBlK8mZnMeROZ0r5r++i/tT+b+2/WW7g9inlEx/UdqVGqBuv7rjdYuIXHhtNpfScin0dy\neMRhsxVu8YnxDNo2iA+bfUirKq0MxsclxmGzxYa2VdvyYbMP9cauOL2CVWdWsWvILqOP8xJCiDSx\nxJw3Kd7MRoo3kem4X3FnqMtQdgzaQftq7VOMC40KxWqtFW2rtmVZj2UGV3Vej7hOy1UtaV6xOdsH\nbte7MMBUnx34jOIFivN5688NxiqlcNjpQNH8RVnUdZHeIdCtf25l1uFZ7B+232yFphBCGCQ9b5ma\nDJuKTMU10JUxu8awa8guvfuX3Yq8Raf1nRhabyhftvnS4BywkyEn6bO5DzNaz2BCswlmzXnrn1tx\nCXTh9JjT5NIM/z30lfdXXAu/hre9t96C81DwISbsnsC+YfuoUaqGOVMWQgj9ZMFCpibFm8g0tl3a\nxsTdE9ljt0fv5P2g8CA6ruvI5OaTjdouw/2KO447HVnVaxU9a/Y0Z8pcuH+BD3Z/wL6h+yhVsJTB\n+F9O/oLzn874OfpRMG/BFONOhZxi4NaBOA9wNnhElhBCmFV0dNL/muNc02RyyoJZSfEmMoXNFzcz\nxXMKnkM9aVC+QYpxAQ8C6LS+EzPbzjTqnNIVp1cw89BMgz15qRERG0HfLX35ufPPNHq9kcF4lwAX\n5vrNxc/BT+9h84EPA+m5qSereq3C6g0rM2YshBBGMPd8N5CeNzOT4k1kuA3nN/DJ/k/YN3Qf9crV\nSzHubOhZujp1ZV7HeQxvMFxvm0op/s/n/1h7bi0+I3x4q/RbZs05PjGeAVsH0KtmL4bWH2ow3uem\nD+Pcx7F36F69GwfffHwT6/XW/NDpB7P3EgohhFHMPd8NpHgzMyneRIZae3YtX3h9wYHhB3inzDsp\nxp0KOUWPTT1Y0m2Jwc10E3WJTNg9gZMhJznieITyRcqbO20+9vyYfLnz8WOnHw3Gngs9x4CtA9jU\nbxONX2+cYtz9qPt0Wt+JaS2nGSxOhRDCYsw93w2gdGmIiIDERMht3JGBImVSvIkMs/rMamZ6z+Tg\n8IN6j5E6evsofTb3MWrO2rOEZ9i52BH5LJJDIw6l+airV1l+ejn7r+/nxKgTBle4Bj8OpvvG7izu\nupgOb3ZIMe7xs8d03tCZofWHMqn5JHOnLIQQxrNEz1uePFCsGISHm7/tHEi2ChEZYuUfK/n60Nd4\n2XvpLdwOBx+mz+Y+rOu7zmDh9uT5E7o5dSO3lhsPWw+LFG77ru1jpnfSHDpDx289jHlI5w2d+fT9\nTxlYZ2CKcTHxMfTc1JM2VdvwVZuvzJ2yEEKYxhJz3kCGTs1IijeR7pafXs7sw7PxGu7F26XfTjHO\n64YXA7YOYHP/zXSp0UVvmw9jHtJ+bXtqlq7Jpn6byJ8nv7nTJvBhIENdhuI8wNngHLrouGh6bOxB\nv9r9+LB5ypvwJm/uW7V4VRZ0WSDHXgkhMp4let5AijczkuJNpKvlp5fzrc+3eNt76y2APIM8Gbxt\nMFsHbNW7US/AnSd3aL2mNZ2rd+bX7r8aHMpMjftR9+m+sTs/dPqBNlXb6I1NXsxQu0xt5rSfk2Kc\nTukY6TYSndKxpvcao/aIE0IIi7PEnDeQ4s2MZM6bSDfJhZuXvZfeTWf3XN2Dvas9Owbt4P0q7+tt\nMyg8iE7rOzGh6QSmtZxm7pSBpGHNXpt7MbTeUEY0HKE3VinF6F2jyaXlYkXPFXp70j478BlB4UEc\nGH7A4LFeQgiRbqTnLdOT4k2ki+WnlzPHdw7e9t5UL1U9xbjkDXXdhrjxXqX39LZ5MewinTd0Zlbb\nWYxuMtrcKQNJK1eHugylZumazLKaZTD+i4NfEPAwAK/hXuTJlfI/r/lH5+N+xR0/Rz8K5S1kxoyF\nECKNZM5bpifFm7C4FadXvBgq1Ve4uV12Y5TbKNxt3WlWsZneNk/fPU33jd2Zbz0fu/p25k4ZSOpF\nm7RnEpHPI9nUb5PB+Wg/HfsJ18uu+Dr46j03dc2ZNSw+uRg/Rz+jTmUQQoh0Zamet7Jl4epV87eb\nA0nxJixqxekVfOPzDV7DvfQWbjsDdzLGfQy77XbzboV39bZ57PYxem/uzfKey+lTq4+5U35h3pF5\nHLl9BB8HH4MLIJzOO7Hg+AKOOB7htUKvpRjndtmNL7y+4JD9ISoVq2TulIUQIu0sOWx69Kj5282B\npHgTFrP6zOoXhZu+xQkvCjfb3XrPNIWkkwr6OfdjXZ91dH2rq7lTfmHt2bX85v8bRx2PGtxyZNfl\nXUzdN5WDww9SuXjlFOO8bngxym0UHrYe1HytprlTFkKItIuOBp0OihQxf9sybGo2UrwJi1h7du2L\nDXiNKdw8bD0MFm4Hrx9kyPYhbO63We+Gt2nlccWDTw98ire9NxWLVdQb63PTh5FuI/Gw9aBO2Top\nxvnf9X+xerZpxabmTlkIIcwjudfNEtsWSfFmNlK8CbNbf249M7xmcHD4Qb09TG6X3V4UboaGSj2D\nPBm2YxjbB26nddXW5k75hWO3j+Gw04FdQ3ZRu0xtvbFn7p2hv3N/NvbbqLcgu/TgEj039WRlr5W0\nfaOtuVMWQgjzsdSQKSS1GxZmmbZzGCnehFltvriZTw98arBwc7/i/mII0VDhtjdoL8N3DDdq65C0\nuBh2kT5b+rC2z1qaV2quNzbgQQDdNnZjaY+ldHyzY4px1yOuY73emh87/Uivmr3MnbIQQpiXpfZ4\nA3jtNXj0KGlYNpfsa5kW8tsTZuP8pzNTPKfgOdRTb6/Vnqt7cNzpiLutu8EhxD1X9zB8x3B2Dt5p\n0cIt+HEwXTZ04efOPxucS3fz8U06b+jMvI7zsKltk2Lc3ad36bS+EzNaz2Bo/aHmTlkIIczPkj1v\n+fJB4cLw+LFl2s9B0ly8aZo2WdO0u5qm/alpmoM5khJZz46AHUzaMwnPoZ7UK1cvxbh91/Zh72qP\n2xA3g9uBJG/W6zbEjRaVW5g75RdCo0LptL4Tn77/Kbb1bPXG3n16lw7rOjCt5TSGNxieYlxYdBgd\n13VkZKORjG863twpCyGEZVhqj7dkZcvKvDczMEfPW6RSqgLQD3hL07QJplysaVoXTdMCNU27omna\np6/4vK2maY81Tfvjr68vzZCzMCP3K+6MdR+Lh60H9cvVTzHO64YXQ12GsmPQDoMb8HoGeWLvas/O\nwTsNxqZFRGwE1uutsW9gr/cMUkg6P7XT+k44NnJkUvNJKcY9fvaYzhs60692P75o/YW5UxZZkKZp\nwZqmndM07YymaSczOh8hUmTJYVOQRQtmkqo5b5qm7QMO//UVD6CUCgS+0DTN3oR2cgG/AB2Au8Ap\nTdN2/tXWP/kopWTCUCbkGeSJ405Hdg3ZpXe1qM9NHwZvG8y2gdsMDn8euH6AYTuG4TrY1aI9bk+f\nP6Xbxm5YV7dmRusZemMjn0XS1akrPd/uqbcgi4qLosfGHrSp0oZv2n1j7pRF1qUDrJRSERmdiBB6\nPXgAtWpZrv2yZWXRghmkdsHCRSAEGA1YaZo2EtgNXACqmtBOM+CqUuomgKZpm4HewL+LNwusWRZp\ndTj4MEN3DMV1kKveCf7H7xynv3N/NvXbZPBQ98PBhxmyfQguA11oWbmluVN+ITY+ll6be1GvbD1+\n7PSj3tMTouKi6OrUleYVmzO3w9wU42LiY+i5qSe1XqvFz11+Nngig8hRNGSOscgKLD1sKj1vZpHa\n4m2aUkoH/A6gaVp1oA1QF1htQjsVgdv/eH2HpILu31pomnaWpIJxulLqUmqSFuZz5NYR+m/tz5b+\nW/T2pPnf9afXpl783ud3g3uzHb199EWbltwO5HnCc2ycbahYtCK/df9Nb5EVGx9Lr029eKfMOyzq\nuijF2LjEOPo796di0Yos67GMXJr8d1q8RAH7NU1LBJYrpVZkdEJCvJIlFyyA9LyZiUnFm6Zp84Gh\nQGvgyl/v2QEeSqk15k8PgNNAFaVUjKZpXQFX4O1XBc6aNevF91ZWVlhZWVkopZzN/64/fbf0ZUPf\nDbSv1j7FuPP3z9N9Y3dW9lpJt7e6GWyzz+Y+rO+7Xm+baRWfGM+gbYMomKcgv/f5ndy5cqcYm1zk\nlS9SXm9BFp8Yz+Btg8mfJ7/BNkXaHDp0iEOHDmV0GqnxvlLqnqZpZUgq4gKUUn7/DpJnmMhw6THn\n7do1y7WfiZnz+aUppYwPTloskB9YqpQK+eu914CJgItS6rxJN9e094BZSqkuf73+DFBKqXl6rrkB\nNFFKhf/rfWXKzyJS58L9C3Ra34mlPZbqPVc08GEg7de256fOPzG47mC9bV4Mu0jHdR1Z1mMZvWv1\nNnfKLyToErDdbktMfAwug1zIlztfirHxifH039qfvLnysrn/ZvLkevXfOYm6ROxc7IiKi2L7wO0G\nz0AV5qVpGkqpLDU+rWna18BTpdRP/3pfnmEi4xUpAvfuQdGilml/0ybYuRM2b7ZM+1lIWp5fpo7t\nKOC35MINQCn1UCk1CxiQivufAmpomlZV07R8wGDA7Z8BmqaV+8f3zUgqOMMR6S7wYSCdN3RmQZcF\negu36xHX6bS+E991+M5g4Xb10VU6b+jMz51/tmjhlqhLZITrCCKfR7Jt4Da9hVuCLgE7FzuUUmzq\ntynFwk2ndIzaNYpHsY/YNnCbFG7ilTRNK6RpWpG/vi8MWJM0b1iIzCUmBhISLHOuaTKZ82YWps55\ncwHOaJp2BjhE0mrTU0qpBKCQqTdXSiVqmjYR2EdSIblKKRWgadrYpI/VcqC/pmnjSVrVGgsMMvU+\nIu1uPr6J9XprgwVZyJMQOq7ryBetvmBEwxF627wdeZtO6zsx22o2Q+oNMXPGf0vUJeLo5si9qHu4\nD3GnQJ4CemOH7xjOk+dPcB3sSt7ceV8Zp1M6xu4ay/WI6+y23a23TZHjlQN2aJqmSHrmOiml9mVw\nTkL8V/KQqSUXW8mcN7MwddjUmaRCqxJJCxSSN+B6BKxWSn1t9gyNz02GHCwk5EkIbX9vy4fNPmTy\ne5NTjAuLDqPt720Z0WAEn7b6z5Z9L3kQ/YA2v7dhVKNRTG051dwpv5CoS2Sk20huRd7C3dadQnlT\n/hsjUZeIw04H7j69y64huyiYt+Ar45RSTNw9kXP3z7F36F6K5LPgX6lCr6w4bJoSeYaJDOfvD2PH\nwunTlrvHvXvQqBGEhlruHllEWp5fpva8nVFKrfzHjfMBLYCegGdqEhCZW/LGtKMaj9JbuEU+i6Tz\nhs4MeGeAwcLtyfMndHHqQr/a/SxeuI3aNYrgx8F42HroLdx0SsfoXaO5/eQ2HrYeegu3KZ5TOHX3\nFAeGH5DCTQiRfVh6mxCQ803NxNTfXIymaS9OG1dKxSmlDgNfAV3MmpnIcE+eP6GbUzd61+zNZ60+\nSzEueX+z1lVaM9tqtt42nyU8o8/mPjSr0Iz/a/d/5k75heSh0uTCrXC+winGJg+BXou4hvuQlHvn\nlFJM3z+dI7ePsG/YPorlL2ap9IUQIv1ZepsQgLx5kxZDRMh+1WlhUvGmlFoIdNY0bUrye5qmtQPC\ngepmzk1koJj4GHps7EGT15vwXYfvUox7nvCcvlv6Uq1kNRZ0WaB3z7TklZllCpfhl26/WGwT20Rd\nIiN2juDOkztGFW7j3ccT+ChQb6xSihleMzh44yD7hu6jRIESFsldCCEyjKW3CUkm897SzORNepVS\ni/71li8wFfAxS0Yiw8UnxjNw60CqFK/Cku5LUiyyEnWJ2LvaUyhvIVb1WqV3Y1qlFB94fEDks0g8\nbD0sthdafGI8w12H8zDmIbuG7DI4VPqBxwdcfHCRvXYpz11TSvGV91d4XPXg4PCDlCxY0iK5CyFE\nhkqPYVP4e8Vp7dqWv1c2ldoTFl74a6Xpr2bIRWQCyZP2FYo1vdekWJAlT9q/H32fPXZ7UtxOI9ms\nQ7M4fe803vbeFttSIy4xjsHbBvM88Tm7huzSuwI0uXC7EHaBvXZ7KZo/5T2NZh2axc7LO/Ea7sVr\nhV6zROpCCJHxHjyAmjUNx6WV9LylWZqLN5F9KKWYvHcyt5/cZo/dnhS3yQD4yvsr/O/5c3D4QYPb\nZKw4vQKnC04cHXlUb5GUFs8SntHfuT95cuXBZaCL3gIxeag0ucfNUOG2LWAb3vbelCmcDn+RCiFE\nRkmvYVPZ6y3NpHgTL/yfz/9x5PYRDtkf0jvcuPjEYrZe2oqfg5/BSfu7Lu9i5qGZ+Dr4UrawZR4K\nUXFR9N7cmzKFyrC+73q9RadO6RjnPo5LDy4ZLNxmH5rN1ktb8RruZbHchRAi00iPBQsgPW9mIOt0\nBQBLTi5h3bl17LHbQ/ECxVOM23RhE/OOzMNzqKfBnqiTISdxdHNk5+Cd1ChVw9wpA39vUVK1eFWc\nbJwMFm6j3UYT+DCQPXZ79BZu3/p8y5Y/t+A13ItyRcqlGCeEENlGes95E6kmxZvA+U9n5vrN5cDw\nA5QvUj7FuAPXD/CR50fsHbqXN0q8obfNGxE36LulL6t7raZZxWZmzjjJg+gHtFvbjsblG7Oy10q9\niyASdYk47nQkKCKI3Xa79RZu3xz+ho0XNuJlL4WbECIHkdWmWYYUbzmc1w0vJu6eyG673XoLsjP3\nzmC73ZatA7ZSt2xdvW2Gx4bTbWM3Pm/1OT1r9jRzxkluR96m9ZrWdH+rO4u6LtK70jVBl8CInSO4\nFXmL3ba79W6s+83hb9h8cTNe9l56C1khhMhW0uNc02TS85ZmMuctB/O/68/gbYNxHuBM/XL1U4y7\nFn6N7hu7s7THUtpUbaO3zfjEePo596NbjW5MbDbR3CkDcOXRFazXW/Nhsw8NntAQnxjPsB3DCI8N\nN3g81qxDs3D+01kKNyFEzpM8382S55omk563NJPiLYcKfBhIz009WdlrJVZvWKUYFxYdRucNnZnZ\ndiY2tW30tpm8l1uRfEX4odMPZs44yem7p+mxqQdz2s/BsZGj3ti4xDhst9sSmxCL2xC3FFfFKqVe\nWlUqQ6VCiBwnvRYrgPS8mYEUbznQ7cjbdN7Qme87fE+vmr1SjHv6/CndN3bHrp4d494dZ7DdH4/+\niP89f3wdfC2yCa/3DW8GbRvE8p7L6VOrj97YZwnPGLB1ALm0XHq3DlFKMdN7JjsCd+Bt7y2rSoUQ\nOVN6zXcDKF066XisxETIbZkN27M7mfOWw4RFh9FpfScmN5+MfUP7FOPiEuOwcbahYbmGzLKaZbBd\njyseLDyxkF1DdlnksHbnP50ZtG0QzgOcDRZuMfEx9N7cm4J5CrJtwDa9hdsMrxnsvLxTCjchRM6W\nXitNAfLkgeLFITw8fe6XDUnxloM8fvaYzhs6M7DOQD5u8XGKcTqlw97VniL5ivBbj98MnkF66cEl\nHHY6sHXAVioVq2TutFl8YjEfe37M/mH79Q7xQlJvYTenbpQpVIaN/TamuHWIUopP9n/C7qu78bL3\nkg14hRA5W3oOm4LMe0sjGTbNIWLjY+m1qRetKrdittVsvbHT900n5EkI+4btM3jsVURsBL029eLH\nTj/SsnJLc6aMTun4/MDnuF52xc/Rz+D2JI+fPaarU1fqlqnL0h5LUxy6VUoxxXMKvrd88bL3olTB\nUmbNWwghspz0Lt5k3luaSPGWA8QnxjNg6wAqF6/Mwq4L9fakzT86nz1Be/Bz9DN47FWiLhE7Fzt6\nvhMkPTYAACAASURBVN1T7xBsasQlxuG405HrEdc54njE4JmiD2Me0nlDZ1pVbsWCLgtS/Bl1Ssfk\nPZM5EXKCA8MOyCHzQggBcP8+1KqVfveTnrc0keItm9MpHQ47HdA0jd97/653P7SNFzay6OQi/Bz8\njOqNmuk9k9iEWLOvLH387DH9nPtRJF8RDgw/oHd7D4C7T+/SaX0ner3di+86fKe3cBvvPp4LYRfY\nP2y/3pMkhBAiRwkNhXLpuNJeet7SROa8ZWNKKabvm86Nxzdw7u+s9+gon5s+fLT3IzxsPahcvLLB\ntt0uu7H+/HqD7ZrqVuQtWq1uRZ0ydXAZ6GKwcLv5+CZt1rRhaL2hzO04N8XCLVGXyEi3kQQ8DMBz\nqKcUbkII8U/370P5dNzfUnre0kSKt2xsrt9c9l/fj/sQdwrmLZhi3IX7F+jv3J9N/TYZPD0Bkjbt\nHeU2ii39t5h1or//XX9armrJqMajWNR1kcHtRgIfBtJ6TWs+bPYhn7f+PMW4BF0Cw12Hc/PxTYNn\nmgohRI4kPW9ZigybZlO/n/2dlX+s5IjjEb3zukKjQumxqQcLuiygw5sdDLYblxjHoG2DmNF6Bi0q\ntzBbvi4BLox1H8vyHsvpW7uvwfgz987QbWM3vu/wvcEtT2y32xIdH42HrYfeIlYIIXKkxER4+DD9\n9nmDpHt5eaXf/bIZKd6yIY8rHnx24DMOjTjE60VfTzEuOi6a3pt749DQAdt6tka1/cn+T6hYrCKT\nmk8yS65KKeYfm8+C4wvYa7eXJhWaGLzG75Yf/Zz78Wu3X+n3Tr8U454lPGPQtkEAuA5yTXG/NyGE\nyNEePUrady2v+abAGFS+fNJQrUgVKd6ymaO3j+Kw04FdQ3ZR67WUVw4l6hIZsn0ItV+rzddtvzaq\nbddAV1wDXflj7B8G934zxvOE54xxH8OF+xc4NvKYUXPtdl/djb2rPU42TlhXt04xLiY+hj6b+1C8\nQHGcbJzIlztfmvMVQohsKb3nu0HS/UJD0/ee2YgUb9nItfBr9HPux9o+a2leqbne2M8Pfk5UXBTb\nB243qhALjQplnPs4XAa5mGVftLDoMGy22FC+SHl8HXwpnK+wwWu2XNzCpL2T2DVkF+9Vei/FuKfP\nn9JjUw+qFq/K6t6rDe5VJ4QQOdr9++k73w2keEsjWbCQTdx7eg/rDdbMajuLrm911Ru7+sxqXAJc\n2Dpgq1ErRZO3GxndeLRZNuI9FXKKd5e/S7s32uE8wNmowu2Xk78wdd9U9g/br7dwi4iNwHqDNTVL\n1+T3Pr9L4SaEEIak92IFgCJFQCmIikrf+2YT8l+2bCA6Lpoem3pg38Cese+O1Rt7KPgQnx/8HJ8R\nPpQuVNqo9pecXMLjZ4+Z2XZmmnPdcH4DUzynGL0wQSnFN4e/YcOFDfg6+FKtZLUUYx9EP6DT+k60\nr9ae+dbzzTK0K4QQ2V5GDJtq2t+9bzVqpO+9swEp3rK4RF0iw12HU69sPb5q85Xe2ODHwQzeNpiN\nNhup+VpNo9q/Fn6N2Ydnc3Tk0TTt5xaXGMdUz6nsCdqDt723UVuSJOoSmbRnEkduH8HPwY9yRVL+\nyzB5o16bWjZ80+4bKdyEEMJYGdHzBlK8pYEUb1mYUopJeyYRERvBRpuNeguWJ8+f0GtTLz5v9blR\nW4Iktz/SbSRftP6Ct0u/neo87z69y4CtAyhdsDT+Y/wpUaCEwWueJzzHzsWO8NhwDo84rHdT3RsR\nN+i4viOjG4/ms1afpTpPIYTIke7fh7qG/6A2O5n3lmoy5y0LW3xyMT63fHAdrH8bDJ3SMdRlKC0q\ntTBpiw+nC05ExUUxufnkVOd44PoBmixvQpfqXXAd7GpU4fb/7d13XFX1/8Dx1wHcq5wpOXPmzpEr\nxdxaDtQ0V44UyxZqw36VTS2bmg3z6xYLF2oOyIWKW3GguTD3ABVxITLu5/fHB82UcYF7Ofdy38/H\n4z5EOOeeN3DPh/f9jPfnWuw1Os7rCMCqvqtSTdyOXD5Ci5ktGNV4lCRuQgiREWb2vF24kPXXzQak\n581JrTq2ivEh49k6ZCsFcxVM9dgP133ItTvXWPjCQquHE6/FXuPdNe+y+IXFae50kJwESwKfbfiM\nqaFT8fP249nyz1p13vkb5+ng14FmpZuluctC6IVQOs3rxPhW4xlYZ2C6YxRCCIE5c95Aet4yQZI3\nJ7Tv4j4GLBnA0t5LKfdIuVSP9T/gj1+YHzuH7kxXrbNxm8bR/on2aZYcSc7pa6fps6gPeXLkYfew\n3akWCr7f4cuH6eDXAZ96Przb9N1UE82Q0yF4+3sz5bkpVi18EEIIkQIzSoWATt62bcv662YDkrw5\nmchbkXT5owuTO0xOs2zHjnM7eH3V66wZsCZde5Cevnaa/+35H2GvhKU7vgUHF/DaqtcY1XgUo5uM\nxs2wbmR+06lN9FjQg69af5VmL1pQeBD9AvqlWahXCCFEGhIT9Q4LxWy3T7XVpOctw2TOmxOJTYjF\n29+b/rX606tGr1SPPXv9LN38uzGt8zRqlaiVrut8tP4jXqn/CqUKlLL6nOjYaPos6sMH6z9gWe9l\nvNP0HasTtwUHF9B9fnfmdJuTZuLmf8CfAUsGsKTXEqdI3E6ePMns2bPNDiNdvvjiC+Li4swOQ7gY\ne9wr8lq2wuXL8Oij4GFCX44kbxmnlMoWD/2tZF+JlkTVc35P1XN+T5VoSUz12Nj4WNX4f43V5xs+\nT/d1Lt26pAqNL6Su3r5q9Tl/hf+lyn5fVo1YMULdiruVrut9v/V75fmtp9pzYU+ax07dPVWV+raU\n2ndxX7quYZYrV66ovn37qoSEBLNDSZcjR46oAQMGmB2GVZLue9PbH1s8snsblhp73SvO9Fo2zd69\nStWoYc61T59WqlQpc67tADLTfknPm5MYFTSKiFsRzO42O9UeLaUUPst9KFmgJGOeGZPu68wLm0en\nyp2sWhV69fZVhiwdwtA/hzLluSlM7jiZvDnyWnUdi7IwMmgkU0OnsmXIFuo8VifFY5VSjNs0jnGb\nxhH8UnC6exLN8t577zF69Gjc3dO/4MNMlStXpnbt2kyfPt3sUISLsNe9Iq9lK5i1WAGgeHGIjASL\nxZzrOzFJ3pzAj9t/5K9//mJJryXk9sid6rGTd0xm78W9zO6aepKXkoDDAfSp0SfVYxItiUzZNYWq\nP1UlT448hL0SRruK7ay+RmxCLL0X9mb3hd2EDAqhTKEyKR6rlOLt1W/zx4E/CBkcQqUilay+jpkO\nHz7MyZMnqVMn5aTUkQ0dOpTvvvuO+Ph4s0MR2Zy97xV5LafBrDIhALlyQcGCes6dSBdJ3hxcwKEA\nxoeMZ/mLy3k0z6OpHrvj3A4+2/gZi15YZNV+ock5HnWc6sWrp/j11cdXU39qffzC/AjqF8TkjpMp\nkKuA1c8fHRtN+7ntAQjqF5Tq9xSfGM+gpYMIOR1C8MDgdM3BM9uPP/7ISy+9ZHYYGVagQAEaNGhA\nQECA2aGIbM7e94q8ltNgZs8byLy3DJLkzYFtP7sdn+U+/Pnin6nu6Qlw8eZFus/vzm/P/8YThZ/I\n0PUSLYmcuX6GYnn/u+pIKcWmU5toPbs1I1aO4P1m77Nh4IZUhzqTcyr6FM2mN6POY3X4o8cfqfYi\nxsTH0NW/K5diLrF2wFoK5ymcoe/JLIGBgTRu3NjsMDKlSZMmLFmyxOwwRDaXFfeKvJZTYVaZkLsk\necsQKRXioM5eP0v3+d2Z1nka9UrVS/XYREsifRf3ZXCdwXSt2jXD13R3c2dwncH0XtSbj5p/xOlr\np9kfsR+/MD9yuufkzaffZHDdwRna43Tvxb08N+85RjcZzZtPv5lqDbeo21F0/r0zFR6twLTO0zK1\np6qtffXVV+zfv59WrVpRpkwZduzYQXh4OLVr1+bNN/VOFKdOnSI6OpoKFSok+xwTJ04kJiaGPXv2\n8Mknn7B48WKUUly9epVvv/3WJnHa4hoNGjRg/PjxNolHuB5HulfktZyKixehdm3zri/JW8ZkdKWD\noz3IRiu1om9Hqxo/11ATQiZYdfynwZ8qr5leKiEx8yu14hLi1MAlA1WdX+uoLr93UaODRqsdZ3co\ni8WS4edcdWyVKjahmFpwcEGax56KPqWqTa6mRgWNSnNVbVbbu3evWrp0qVqxYoUqWLCg8vf3V0op\nFR8frwoWLKjCwsKUUkpt3LhRVa1aNdnnmDhxojp8+LBSSqmpU6eq4sWLq3PnzqkPPvhAFS9e3CZx\n2uoaZ8+eVe7u7iouLs4mcdkDstrUITnaveIMr2XTtG6tVFCQedcfOVKpCdb9rctuMtN+ybCpg0m0\nJNJ7UW9alG3B6Caj0zx+9fHV/LLrF/y8/TK0jdWDcrjnYEaXGezx2cOS3kv4uu3XNPBsYPW2Wg/6\neefPDFo6iIBeAfR4skeqxx6MPEiz6c14+amX+abtNxlacGFPu3btok2bNhw5coR69erxwgsvAODh\n4UHu3LnZtGkTAJGRkTzySPKrdRMTE6lSpQoAZ8+epW7dupQqVYrhw4ffOz+zrLmGxWJh5MiRtG2b\ncq28woULo5QiOjraJnEJ1+Fo94q8llNx8aLMeXNCMmzqYD5c/yGxCbH80P6HNBOms9fPMmDJAH7v\n/rvDTea3KAtj1oxhyZElbB68mQqPJj8scteGkxt4YeELfNf2O/rW6ptFUabPkCFDANi8eTMtWrS4\n9/nIyEguXbpEgQJ64YbFYsHNLfnE09fX997HGzduvJc8eXp62ixOa67h5uZGrVq1KFKkSIrP4+7u\njlIqw4m7cF2Odq/IazkVjjDnbe9e867vpByra8PFTQudxvyD85nfYz4ebqnn1QmWBHot7MUbDd/A\nq5xX1gRopZtxN+n6R1e2n9vOlsFb0kzcFhxcQM8FPZnnPc9hE7f7bdmy5T9/kIKDg3Fzc6N58+YA\nFCtWjKioqFSfIy4ujm3btv3neWwtrWusX78+1etfuXIFDw8PihYtaq8QRTbnKPeKvJZTkJAAV6+C\nmT8X6XnLEEneHMSOczsYs3YMK/qssGof0o+DPyZ/zvy82+zdLIjOeueun6P5jOaUyFeC1f1XUyRv\nyj07oOvS+Qb5srr/alpVaJVFUWbciRMnuHr16n9Wx/n7+9OtWzfKlNH16jw9PbmSTN2ihIQE1q9f\nD8DWrVsBPZEa4PLly/j5+QHwzz//8P7777NixQpeffXVdG0ZlNY15s6de+/Y4OBgTp06xcyZM5k4\nceJDzxUVFUUJM9+RC6fmSPeKvJZTEBkJRYqAmYXEJXnLmIxOlnO0B0482ffijYuqzPdlVMChAKuO\nX3F0hfL81lNdvHHRzpGlz5bTW5Tnt55q/KbxaS5wsFgs6v/W/p+qNKmS+ifqnyyKMPNmz56tcubM\nqc6dO6eUUmrVqlWqfPny6vz58/85ztPT894xd/30008qd+7cKiYmRo0aNUo9/vjj9742duxYdfXq\nVRUTE6Nq166tLl++rJRSytvbW/3999//eZ6AgABVvHhxtWfPw1uKWXMNpZQKDw9XLVu2vPe1kiVL\nPvRcc+bMUV26dLHq52IWZMGCw3KEe+UuZ3gtm2LHDqXq1TM3hshIpQoXNjcGk2Sm/ZI5byaLS4yj\nm383BtYeaFWZjws3LjBo6SAW9lxIifyO807Sb78fvkG+zOgyg06VO6V6bIIlgVeWv8K+iH1sHrzZ\nqp5GR7FlyxYGDhzIDz/8QN68eTl9+jQbN26kZMmS/zmubdu2bNq0iV69et37XPPmzfH29mb8+PF4\ne3uTL18+Ro0aRd68eenZsyePPPIIfn5+VKtWjSJFiqCUIjw8nGrVqv3nuS0WC/Hx8SxevPihqvTW\nXAP0HKKOHTsCusL9o48+XCx506ZNdOqU+u9SiJQ4wr1yl7yWU3D2LDz+uLkxFCkC16/DnTt6xwVh\nnYxmfY72wEnftb624jXV5fcuVpXFsFgsqqNfR/Xhug+zIDLrxCfGq9FBo1W5H8qpsIiwNI+/HX9b\ndfujm2ozu426cedGFkRoW7Vq1VJ+fn5pHrd+/XrVrVu3dD//d999p7788kullFIhISGqT58+Kjg4\nWMXGxj507Mcff5zu57/rm2++UYGBgUoppcaMGaOmT5/+n6/fuXNHValSRV2/fj3D18gKSM+bw3KU\ne8VZXsummDRJqREjzI5Cb05/+rTZUWS5zLRfMufNRHP3zyXweCCzus6yqizGD9t+4NKtS3zQ/IMs\niC5tV29fpYNfB/Zc3MPOoTupUbxGqsdHx0bTwa8DHm4e/Pnin+TPmT+LIrWN69evc/DgQRo2bJjm\nsV5eXsTGxnLs2LF0XePFF1/k/PnzBAYGcuLECQoWLMipU6fI9cA70vPnz1O8ePF0Pff9evXqxfbt\n25k1axaenp4MGjToP1+fPXs2ffv2vbcqUIj0cKR7RV7LqXCEnjfQ894uXDA7CueS0azP0R442bvW\nrWe2qmITiqn9F/dbdXxYRJgqOqGow8wPOxBxQFWcVFGNDByp4hPj0zz+/PXzqtYvtdRrK16zSTFh\nM6xatUo98sgjVh9/8uRJ1atXr0wVOE7JhAkTVGRkpM2fVymlLl68qLp27eoUBU2RnjeH5Cj3ijO9\nlk3Rp49Sc+aYHYVSnTsrtWiR2VFkucy0X9LzZoKT0Sfx9vdmRpcZ1CxRM83j4xPjeWnJS4x7dlya\ne5xmhcWHFuM1y4uPmn/Et+2+TbOsSXhUOM1mNKNHtR5M6jDJJsWEs9q8efN44403uHPnDn379uXW\nrVtpnlO2bFlGjx7NTz/9ZNNYzp07R/78+SlWzD5zBb/66iumTJlCjhyOsy2ZcB6OdK/IazkNjtLz\nVro0nDljdhROxdDJn/MzDEM5w/dyO/42TaY3YUCtAfg29k37BODTDZ+y9exWVvZZaWqRSYuy8HHw\nx8zaN4tFLyyifqn6aZ6z/ex2uvzRhU9bfsqwesOyIErhSgzDQCmVLSqvOksbJrKRJ56AoCCoWNHc\nOL76Ci5dgm++MTeOLJaZ9ktWm2YhpRRDlg2hWtFqvNXoLavO2XluJz/t/InQYaGmJm43424yIGAA\nl2IusXPoTornS3u+VWB4IP0D+jOzy8w0V6AKIYTIQkrBuXNgw91dMqx0aQgNNTsKpyLDplnoi01f\ncPzqcaZ1nmZVInY7/jb9A/ozqf0kPAuad4MdunSIhlMbUiRPEdYOWGtV4vbb7t94aclLLOm1RBI3\nIYRwNJcvQ/78kCeP2ZHIsGkGSM9bFll3Yh0/7/yZ3cN2kyeHdTfLF5u+oGaJmvSq0Svtg+3kzyN/\nMmTZEMa3Gs+Qp4akebxSik82fMLc/XMJGRRCpSKVsiBKIYRwfErBiRP6cfq03pkKwDD09qJlykCl\nSlm01aijzHcDSd4yQJK3LHAq+hT9FvdjVtdZlCxQMu0TgLCIMKbsnsJeH3M27I1PjGds8Fhm75vN\nsheX0ejxRmmeE5cYxyvLX2FvxF42D97sUEWEhRDCDJcuwcKF8NdfsHkz5MypE7QyZaBwYZ24JSbC\n9u06oTt0SNetbdYMnnsOOnWyU+eYIyVvnp4QEaH3WvWQtMQa8lOyszsJd/Ce783oJqNp80Qbq85J\ntCQyaOkgvmz1pSnDpZG3Ium5oCd5PPIQ6hNq1TDptdhrdPPvRsFcBdkwcIPT1XATQghbsVggMBAm\nT4YtW6BDB+jZEyZO1ElbWuceOgQbN8Kvv8LQodC1K7z1FtSubcMgHSl5y5EDihbVtd5KlzY7Gqcg\nc97sbMzaMZQtVBbfRtatLAX4ddev5MuZj8F1B9sxsuStO7GOp6Y8RfMyzVnZd6VVidup6FM0n9mc\nJ4s9yaIXFkniJoRwSRYLzJ0LNWvC++9D7956TcDvv0OfPmknbgBublC9OrzyCqxZoxO5KlWgY0do\n2xZCQmwUrCMlbyBDp+kkPW92tOzIMhb+vZC9w/davVI08lYkH2/4mPUvrc/S1aUJlgQ+Dv6YGXtn\nMLPLTKt7Cbec2UL3+d15u8nb+DbyNXVFrBBCmCU4GEaN0p1IP/wArVvrIdHMeuwxeO898PUFPz+d\nBDZooKtrZKrCx9mz0LJl5gO0FUne0kV63uzkeNRxXl72Mgt6LqBwnsJWnzd2/Vj61OiT5lZTtnT+\nxnlaz27N9nPbCR0WanXitvjQYrr+0ZVpnacxsvFISdyEEC7n8mXo1w8GDoR33oGtW6FNG9skbvfL\nlQsGD4YjR6B+fWjUCD7/HOLjM/iE0vPm1CR5s4Pb8bfpsaAHY1uM5enHn7b6vNALoQQcDmCs11g7\nRvdfQeFB1PutHq3KtyKwb6BViwwsysInwZ/wZuCbrOq7io6VOmZBpEII4VgWLtRDpMWLw8GD0KuX\n7ZO2B+XJA2PGwJ49ej5dgwawNyPr2iR5c2oybGoHI4NGUqVIFV5t8KrV5yileDPwTb549ot09dRl\nVFxiHO+teY+Ffy9knvc8Wpa3rvv8dvxtBi8bzMnok+x4eYfVq2eFECK7iInRCwjWr4fFi6Fx46yP\noXRpWLEC5szRc+E++ghGjLAyeVRKJ2+OUKD3rtKlbTihL/uTnjcbm7V3FmtPrGXKc1PSNYy4KnwV\nUbejGFhnoP2CS3I86jjNZzQnPCqcvcP3Wp24nb1+luYzmwOwbsA6SdyEEC7nyBF4+mm4eRN27zYn\ncbvLMGDAAN0DN2MGdO8O165ZcWJ0tJ6cV6CA3WO0mvS8pYskbza0+/xuRq8ezZLeSyiUu5DV5yml\n+GDdB3zW8jO7btqulOLnnT/z9P+epneN3iztvdTqXr6tZ7bScGpDelTrwTzveVYXGhZCiOxi1Sp4\n5hl4/XW9eKBgQbMj0ipW1AncY4/puXDHjqVxgqMNmYIkb+kkw6Y2EhMfQ9/FfZncYTJPFnsyXeeu\nPLaSRJVIt6rd7BQdXLx5keHLh3Pm+hlCBodQtWhVq89dcHABr658VfYoFUK4JKXg22/hu+8gIACa\nNjU7ooflygU//wy//abjmztXD6cmyxGTt8ceg6gouHNHfzMiVdLzZgNKKUasHEH9UvXTvZWVUorP\nN33O/z3zf3ZZramUYl7YPGr/Wpsniz3JlsFbrE7clFJ8s+UbfIN8Wd1/tSRuQgiXk5io55LNmaN3\nQXDExO1+w4bphRQDBsDMmSkc5IjJm7s7lCypC+OJNEnPmw3M3DuTned2su3lbek+N+R0CFG3o+he\nrbvN44q4GYHPch/Co8JZ/uJyGng2sPrc+MR4hi8fzq4Lu9g6ZCulC0nVayGEa4mJ0XXVbt2CTZsc\nZ5g0Lc2b67pzHTrokcgPPnhgIYMjJm/w79BphQpmR+LwpOctk05Fn+KdNe/we/ffM7SzwNTQqQyv\nN9ymc92UUiw4uOBeb9vuYbvTlbhdi71Gx3kdibgVwebBmyVxE0K4nGvXoF07Pad/xQrnSdzuqlpV\n15wLCNBz9CyW+77oaCtN75J5b1aT5C0TEi2JDF42mJGNRlKzRM10n38t9hrLjiyjf+3+Novpn6v/\n0HFeR8YGjyWgVwDjWo0jl4f18weOXjlK42mNqVy4Mkt6L5GtroQQLufSJb35QN26MGuW3kzeGT32\nmC5nsm8fDBqk930H4MQJKF/e1NiSJcmb1SR5y4QvQ74kwZLA203fztD5geGBNCvTjKJ5i2Y6lvjE\neL7f+j1P/+9pWpZryb7h+2hcOn1r2Dec3MAzM57Bt5EvP3X6CQ83GVUXQriW8+f1sGPHjnojeTcn\n/ytZqBAEBUFEhC4iHBcHhIdncm8tO5HkzWpO/rI0T8jpEH7c8SN+3n4ZTnJW/7OaNhWs24oqNWv/\nWUudKXUIPB7I5sGbeafpO+Rwz2H1+Uopft31Kz0X9GSe9zyG1hua6ZiEEMLZnDsHXl56sv/nn9t/\nt4SskjcvLF2qF1/09b6NiozUiZKjkeTNatK1kgE37tyg3+J+TH1+Ko8XzPikzzX/rGF0k9EZPv/o\nlaP4Bvly+PJhvm37LV2qdEn3itW4xDheWf4KO87vIGRwCJWLVM5wPEII4azu7tM+dKjeozS7yZUL\n5s+H0R1PcNajHMXi3cltv7KiGVO2LJw8aXYUTkF63jLAN8iXZ8s/y/NVns/U80TciqBMoTLpP+9m\nBL6BvjSZ1oSW5VpyaMQhulbtmu7E7eLNi7Sd05ZLMZfYOmSrJG5CCJd07pxO3Hx8smfidlfOnPDd\nq+FEFniCnj2ThlAdSaVKcPz4A6srRHIkeUuneWHz2HR6ExPbT8zU89xJuEN8Yjx5PKzfqeDCjQu8\ns/odqv1UjUSVyIFXDzC6yWhyuqd/Nu3GUxup91s9vMp5EdArQBYmCCFc0sWL8OyzusdtdMYHQpyG\nx8lw6vSoiLs79O4N8fFmR3Sf/Pnh0Ud1N6hIlSRv6RBxM4K3At/ij+5/UCBX5vaEy+Geg0K5C3Hm\netrj+0cuH2H48uFU/7k6sQmx7H9lP5M6TOKx/I+l+7pKKX7a8RM9F/RkeufpfOz1sV235BJCCEd1\n6RK0agX9+2fvHrf/CA/HvXJF/P11z1u/fvetQnUElSrB0aNmR+HwJHlLh7eC3mJw3cHULVk308/l\nZrgxuM5ghiwbQkx8zENfP3f9HFN3T6Xp9KZ4zfKiWN5iHHntCJM6TMrwPLubcTfps7gPU0Onsnnw\nZtpVbJfZb0MIIZzS1at6+yhvb13E1mUkrTTNlUvvxBAdDUOGONBIZeXKVmzOKgyllNkx2IRhGMqe\n34v/AX8+Cv6IPT57yJsjr02eM9GSyMClA9l5bifPV36eeEs80bHR7Dy/k4s3L9KqfCv61+pP+4rt\n07V6NDnhUeF0/r0zjR9vzOSOk2VjeZEtGIaBUipbrAm0dxsm/nXjBrRpA02a6D1Ls8uqUqtUqKBr\nh1SqBOhdJNq3h+rV9d6opv8svvlGT0L8/nuTA7G/zLRfkrxZIeJmBLV+rcWfL/5JQ8+GNn1ur/L6\nVwAAFaBJREFUi7IQcjqEjac2kjdHXgrlKkTNEjWpX6o+boZtOkbX/rOWPov78KnXp/jU97HJcwrh\nCCR5E+l1+7au4Va5Mvz6qwMkK1kpLk5vGXHjxn8qD1+/Dq1bQ4sWMGGCyT+TpUvht9/0thbZnCRv\n2Lfh8/b3pkqRKoxvPd4uz28vSim+2/odX2/5mj96/IFXOS+zQxLCpiR5E+kRF6eHSQsV0hvNO3sB\n3nQ7elRveHr8+ENfiorSyVuvXiYPIx86BF26uMS8t8y0X1LnLQ3Ljy7n4KWDzOs+z+xQ0iUmPoYh\ny4YQHhXOtpe3Ue6RcmaHJIQQpklM1AsT3N1h5kwXTNwg1Z0VCheGv/7Su0sULAhvvJHFsd1VoQKc\nPq2XwebI3HSh7MwVX75Wi7odxfDlw/ml0y/k9shtdjhWO3rlKM2mN8PNcGPjwI2SuAkhXJpSMHy4\nXl3q7+/COUEa22KVLAlr1uhpZzNnZl1Y/5ErF3h66v1XRYokeUuFb5Av3at159nyz5oditUW/r2Q\nptObMqTuEOZ2mysLE4QQLk0pXb8tLExPp8rtPO/Dbc+KPU3LltU9cGPGwKJFWRTXgypVkhWnaZBh\n0xRsO7uNNf+s4chrR8wOxSp3Eu7wwboPmP/3fIL6BfFUyafMDkkIIUz3xRewejUEB+u5+i4tPFwv\ns01D1aqwciW0a6fr5rbL6qpSlSvrOW+dOmXxhZ2H9Lwlw6IsvBn4JuNbjXeKnQeOXD5C42mNORZ1\njN3DdkviJoQQwMSJMGuW7kkqXNjsaByAFT1vd9WtCwEBuohvSIid43rQ3eRNpEiSt2T8tvs33A13\n+tXqZ3YoafI/4E+zGc3wqedDQK8AiuYtanZIQghhuunT4bvv9Byux9K/GU32k5AAp05B+fJWn9K0\nKcybp1fohobaMbYHybBpmmTY9AEXblzgw/Ufsv6l9Tars2YPsQmx+Ab6svqf1TJMKoQQ95k/X5e7\nCA7Wc7gEegXnY4+le9JfmzYwZYoewVy7Fp580k7x3U963tIkydsD3lnzDi/XfZkaxWuYHUqKjl45\nSvf53alWtBq7h+2mUO5CZockhBAO4c8/4fXX9VBp5cpmR+NA/v4bqlTJ0KnduumdGNq21QmxlSOv\nGVemjF4aHBMDeW2zo1F2I8nbfcIiwvjr+F+Evx5udigpCjgUgM9yHz5r+RnD6g3DcKny4EIIkbLV\nq/U+nStWQO3aZkfjYPbs0RPZMqhvX51LtW4NGzbYuUfT3V0P7x4/DjVr2vFCzkuStyRKKUavHs2Y\nZmMokMvxliTduHMD3yBf1p5Yy4o+K2jg2cDskIQQwmEEB0OfPnqSfQNpHh+2Z4/ePiEThg7V24u1\naqUTOE9PG8WWnCpV4PBhSd5S4LiTurLYymMrOXPtDCMajDA7lIcciDxAg6kNUEqxf/h+SdyEEOI+\nISHQs6cuwNusmdnROKjQ0Ez1vN31xhvg4wPPPgsXLtggrpTUrZvFqySciyRvQKIlkTFrxzC+1Xhy\nuDtO6e0ESwLjNo2j5ayWvNfsPaZ1meaQvYJCCGGWrVv1ash583RCIZIRFaUfNpqs9vbb8NJL+ucd\nEWGTp3xY/fqwa5edntz5ybAp4H/Qn/w589O5SmezQ7nneNRx+izuQ6Fchdg1dBdlH5ElU0IIcb8t\nW6BrV13LzYras65rzx49CdCGG7q+/76uPtKyJaxbZ4dyLHeTN6VA5nY/xOV73pRSTNg8gQ+af+Aw\nk//n7JtDo2mN6FuzL0H9giRxE0KIB4SEQJcuMHs2dOhgdjQObs8eeMr25aQ++ghefBG8vOwwhFq8\nOBQsqBctiIe4fM/bsiPLsCgL7Su2NzsUIm5G8EbgG4RFhLF2wFpqlahldkhCCOFwgoP1HDc/P12+\nQqQhNNRuP6gPP9SLQ728dEHk0qVt+OT168POnVlQm8T5uHTPm1KKTzd+ymctPzO9IO9fx/+i7pS6\nlCtUjt3DdkviJoQQyVi1Sidu8+dL4mY1O/W83fX++zBsGDRvbuOOsgYNZN5bCly6523jqY3cjLvJ\n81WeNy2GKzFXeG/Ne6wKX4Wftx8ty7c0LRYhhHBkixbBK6/AsmXQuLHZ0TiJW7f0tljVqtn1MqNG\n6U3svbwgKMhGOzHUrw+ffWaDJ8p+XLrn7YftP/DW02+Z1usWcCiA6j9XJ0+OPBx89aAkbkIIkYKp\nU/XOCUFBkrily759UL065LB/JQUfHxg/Xq9C3bbNBk9Yr57uNUxMtMGTZS8u2/N26dYl1p1Yx+yu\ns0259uurXif0QigBvQJoXFpaIiGESI5SMG4cTJsGGzfK9Kd0y+TOCunVrx8ULgydO+vFJO0zM538\n0UehRAk4ciSLNlV1Hi7b8+Z/0J9OlTplad00i7IwLXQaNX+pSZlCZdg3fJ8kbkIIkYKEBBgxQs9v\n27xZErcMCQ2163y35HTsCEuXwsCBMH16Jp9M6r0ly2V73vwP+vNe0/ey7Hono08yeOlgYuJjWNl3\nJU+VzNqbSQghnMnNm3o3p4QE2LRJV40QGbB9OwwfnuWXbdxYb6HVsSOcOAGffprBcm0NGugVpwMG\n2DxGZ+aSPW+RtyIJiwijdYXWdr/WzbibfLjuQ+r9Vo92T7Rj8+DNkrgJIUQqTp+GZ56BkiVh+XJJ\n3DLs7Fm4eDHLe97uqlJF74CxerXe2P727Qw8ifS8Jcslk7eVx1bS9om25PLIZbdrKKX448AfVJlc\nhRPRJ9jrs5d3m72Lu5u73a4phBDOLiQEGjWC/v31IoUsmGeffQUG6q0n3M37u1O8OKxfr3vdnnlG\n55PpUq8eHDgA167ZJT5n5ZLJ267zu2j8uP3mmh25fIQ2c9owPmQ8C3ouYK73XEoXsmXlQiGEyF6U\ngl9+ge7dYcYMGDlSdkXKtMBAh9h+Ik8emDsXXngBnn5aLzyxWr580KyZXmYs7nHJ5C0sMswuRXBP\nXzvNy8tepun0pnSq1Indw3bTpHQTm19HCCGyk1u3dE/br7/qnrd27cyOKBuIj4e1ax3mh2kY8M47\negHDCy/A11/rhN0qnTvDn3/aNT5n45LJ29nrZ226X+j1O9cZu34sT015iuL5inP09aP4NvbFw81l\n14MIIYRV9u+Hhg318OjWrVCpktkRZRNbt0KFCrrUhgNp1w527ICFC/XetJcvW3HS88/DypV69YoA\nXDR583DzIMGS+RfBtdhrTNg8gYqTKnLy2kl2Dt3JuFbjKJynsA2iFEKI7EspmDQJWrX6t0cmb16z\no8pGAgMzWWTNfsqU0SuIq1SBOnV0B2GqHn8cypbV9WIE4KKlQnJ75Ob6nesZPv9KzBW+2fINU3ZP\noX3F9qx/aT3Vi1e3YYRCCJF9nT4NQ4dCdLTuIJL6bXawahX8+KPZUaQoZ049dNquHbz0kp7rOG6c\nnuKWrLtDpy1aZGmcjsole946VerE7H3p31nh70t/4/OnDxV/rMiV21fYO3wv87rPk8RNCCGsYLHA\nlCl6AaGXlxTetZsLF+DkSb1s18G1bq2Hzq9ehVq1IDg4hQOff15X/rV6olz2Zqhs8oMwDENZ+71c\nuHGBJ39+kr9f/ZuSBUqmeuz5G+dZcHABfmF+nLl+huH1hjO8/nBK5HeseQRCuCLDMFBKZYs1ielp\nw5zR/v16U/nERL3VVXV5z2s/P/+sK+T6+5sdSbr8+Se8+qreG/Xrr3WZkXuU0sOna9dC1aqmxWhL\nmWm/XLLnrWSBkoxuPJoqk6swZs0YTlw9wc24m9xJuMOp6FOsOLqCTzd8SsOpDanxcw1CL4by+bOf\nc8b3DGO9xkriJoQQVoqKAl9f3cMyYABs2SKJm11ZLDBxos6Unczzz8Pff0PRolCjhh71jY9P+qJh\n6BUO8+ebGqOjcMmet7uORx1n4vaJ+B/051bcLeIS4yiStwg1i9ekdonadKjUgWfKPEMOd6kSKYQj\nkp43x3Xnju4AGj9ez2f65JMHelKEfaxYAR9+CLt3O3WhvLAwGDUKTp2CCRP0lDfj74O6W+7EiWyx\nuiUz7ZdLJ29CCOcmyZvjiYvTRXa/+AJq14avvoInnzQ7KhfSurVeAdC/v9mRZJpSujbvO+9A7tx6\nf9R2U7phtGwJb7xhdniZJskb2afhE0JYT5I3x3HzJvzvf/D993pK0qef6mr6Igvt36/Lg5w8qZdz\nZhMWCyxaBB9/DPXVTn6J9CbXmeO453Hu71HmvAkhhDDF8eO6Z6R8eT2fbeFC3VsiiZsJvv8eRozI\nVokbgJsb9Oyph1K7ftGAsPhq/F/ZuXz/vV6l6ookeRNCCJEusbF6IWOHDroahVKwbZueS96ggdnR\nuagtW/QuBD4+ZkdiN25u0K0bNFzyPmNzjWfv9juULw8DB+oSIxaL2RFmHRk2FUI4LRk2zTpxcbpK\nw8KFsGQJPPXUv8VV8+QxOzoXd/Uq1K2rV5l26WJ2NPanlO6KK1yYyM9/Y84cmDULrl/X+6b27An1\n6zv+eg2Z84bjN3xCCNuT5M2+IiL0EOiKFbB6NVSrBj166Efp0mZHJ4B/E5lSpfR+Y67ixg3d7fvG\nG+Djg1Kwbx8sWKAfsbHQqZN+eHlB/vxmB/wwp07eDMNoD/yAHsKdppT6KpljJgEdgFvAQKXU3mSO\ncbiGTwhhX86SvFnZzpnehp05o0ffNm+Gdevg7FldmaFTJz1EWqqUqeGJB1ksugbLsmV6n7Hcuc2O\nKGsdOwZNm+ru4ObN731aKTh0SL/pWLECdu3Se6h6eenDGzWCRx81L+y7nDZ5MwzDDTgKtALOAzuB\n3kqpw/cd0wF4TSnVyTCMp4GJSqmH9vxwhIZPmCM4OBgvLy+zwxAmcIbkzZp2Lum4LGvDEhIgPBwO\nHtQLFENDdVmwxERo3BiaNIGWLfVInIdL7oCddTLcfkVH63HrS5d0V5Onp81jcwqrV0Pfvroo3OjR\n4O7+0CExMfoNSXCwznF37YKSJfXQf926ULOmLhxdunTWDrVmpv0y+7ZsCBxTSp0CMAzjD6ALcH+j\n1gWYDaCU2m4YRiHDMEoopSKyPFrhkCR5Ew7OmnbOphITITJS95ydPasLnZ48Cf/8A0eP6o8ff1z/\nwapRAwYN0tXsy5Z1/HlC2U2626+bN8HPTxfQe+45nbhls9Wl6dKmDezcqbfvWLkSxo7VXWxu/67H\nzJtXH9amjf5/QgIcOaLfsISG6vzvwAE9Elupkn5UqADlykGZMvpe8fSEwoUd5/4wO3nzBM7c9/+z\n6IYutWPOJX1OkjchhDOwpp0DdNJ1545+xMbqHoPbt/W/t27pv9s3buiJ2dev63nq0dF6C6rLl/Uj\nIgKuXNF/aO7+0SlXTj9atIDKleGJJ1xvhM0pKaV/mSdO6ARl2zZYvlwnJ9Om6e5Rod91rFsHU6fq\nHrioKD0xs149PV5atizky3fvcA8P/calenWd89117ZoeiT12TL/BCQ2FgAA4d06/Cbp9W+8SUqKE\n3sKrSBF9nz3yiH4UKgQFC+r5dfny6X/z5NHJY548kCuXvu9y5vxPbpkhZidvQgghkqz0eB43N3B3\n0427u/u/j1wekM8dSnlADg/9ByhHjqRHTv0HIWchyFUccuYCt7s9BAo4kfRYb9735pKSGwZX6t/P\nK6W7QkNCdHdQfLzO3G/e1I9Ll3QWUKaMXj7ZrJneukJWizzM3R2GD9ePvXv1ZLclS3Rl3zNn9NeL\nFtU/z3z5dCblkXQjubmBYVDIMKif9LjXxZYDKKcficq49+Yq/irERehf2d1HQsJ9j0S4lQDXE/Wb\nskSLnqJoSQSLynwPntlz3hoBHyul2if9/z1A3T+Z1zCMX4H1Sin/pP8fBlo8OGxqGIZMeBPCBTnB\nnLc027mkz0sbJoSLcdY5bzuBioZhlAUuAL2BFx84ZhkwAvBPagSjk5vv5ugNuBDCZVnTzkkbJoSw\nmqnJm1Iq0TCM14C/+HcJ/SHDMHz0l9VvSqmVhmF0NAwjHF0qZJCZMQshRHqk1M6ZHJYQwomZXudN\nCCGEEEJYz+n2NjUMo71hGIcNwzhqGMa7KRwzyTCMY4Zh7DUMo05WxyjsI63fvWEYLQzDiDYMIzTp\n8YEZcQrbMgxjmmEYEYZh7E/lGKe456X9cl3Sfrkme7VfTpW8JRW7nAy0A6oDLxqGUfWBYzoATyil\nKgE+wK9ZHqiwOWt+90k2KqWeSnp8nqVBCnuZgf69J8tZ7nlpv1yXtF8uzS7tl1Mlb9xX7FIpFQ/c\nLXZ5v/8U9QUKGYZRImvDFHZgze8eQCZ9ZzNKqRDgaiqHOMs9L+2X65L2y0XZq/1ytuQtuWKXD+4J\nklJRX+HcrPndAzRO6npeYRjGk1kTmjCZs9zz0n65Lmm/REoydM+bXSpECFvaDZRRSsUkdUUvASqb\nHJMQQlhD2i9hNWfreTsHlLnv/48nfe7BY0qncYxwPmn+7pVSN5VSMUkfrwJyGIZROOtCFCZxlnte\n2i/XJe2XSEmG7nlnS97uFbs0DCMnutjlsgeOWQYMgHuVzZMt6iucTpq/+/vnCRiG0RBdCicqa8MU\ndmKQ8nwgZ7nnpf1yXdJ+uTabt19ONWwqRX1dlzW/e6CHYRivAPHAbaCXeRELWzEMYx7gBRQxDOM0\nMBbIiZPd89J+uS5pv1yXvdovKdIrhBBCCOFEnG3YVAghhBDCpUnyJoQQQgjhRCR5E0IIIYRwIpK8\nCSGEEEI4EUnehBBCCCGciCRvQgghhBBORJI3IYQQQggnIsmbEEIIIYQTkeRNCCGEEMKJSPImhBBC\nCOFEJHkTQgghhHAiTrUxvXBthmG8CeQF6qI39/UGDOBRpdQoM2MTQojUSPslbEl63oRTMAzjDSBQ\nKTUe+AsIBmYAuYB+JoYmhBCpkvZL2Jokb8JZuCuljiR9/DiwRyl1HvgVeMa8sIQQIk3SfgmbMpRS\nZscgRLoYhrEO+Esp9aXZsQghRHpI+yVsQXrehFMxDCMn0AjYYHYsQgiRHtJ+CVuR5E04PMMwPAzD\naJn038ZJ/+5M+lpRwzD6Jn1cwTCMcYZhdDIM42fDMAaYEa8QQtwl7ZewB0nehDMYBqw0DCMP8Dxw\nRSmVkPS114AVSV9bDHyrlFoBlCCpgRRCCBNJ+yVsTkqFCGewEd2wjUn695ZhGN8CMcACpVR00rvX\nQ0qpK4ZhGEBFpdQh80IWQghA2i9hB5K8CYenlDoA9L3vU1uSOaw4sDfp4ybAAcMwWgDblFJ37Byi\nEEIkS9ovYQ8ybCqyi9+BUoZhtAfKA9eBstLwCSGcgLRfIl2kVIgQQgghhBORnjchhBBCCCciyZsQ\nQgghhBOR5E0IIYQQwolI8iaEEEII4UQkeRNCCCGEcCKSvAkhhBBCOBFJ3oQQQgghnIgkb0IIIYQQ\nTkSSNyGEEEIIJ/L/e8d2r/zz0AQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f742a25f3d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy.stats import norm\n",
    "from matplotlib.mlab import bivariate_normal\n",
    "\n",
    "x, y = np.mgrid[0:1:.01, 0:1:.01]\n",
    "\n",
    "fig, ax = plt.subplots(1, 2, figsize=(10, 4.5), dpi=200)\n",
    "\n",
    "mu_a = 0.5\n",
    "mu_b = 0.5\n",
    "sigma_aa = 0.15\n",
    "sigma_bb = 0.15\n",
    "sigma_ab = 0.0215\n",
    "\n",
    "\n",
    "# 联合分布\n",
    "\n",
    "z = bivariate_normal(x, y, \n",
    "                     mux=mu_a, \n",
    "                     muy=mu_b, \n",
    "                     sigmax=sigma_aa, \n",
    "                     sigmay=sigma_bb, \n",
    "                     sigmaxy=sigma_ab)\n",
    "\n",
    "ax[0].contour(x, y, z, colors=\"g\", \n",
    "              levels = [0.99 * z.min() + 0.01 * z.max(),\n",
    "                        0.9 * z.min() + 0.1 * z.max(), \n",
    "                        0.5 * z.min() + 0.5 * z.max()])\n",
    "\n",
    "ax[0].plot([0, 1], [0.7, 0.7], 'r')\n",
    "\n",
    "ax[0].set_xlim(0, 1)\n",
    "ax[0].set_ylim(0, 1)\n",
    "\n",
    "ax[0].set_xticks([0, 0.5, 1])\n",
    "ax[0].set_yticks([0, 0.5, 1])\n",
    "\n",
    "ax[0].set_xlabel(r\"$x_a$\", fontsize=\"xx-large\")\n",
    "ax[0].set_ylabel(r\"$x_b$\", fontsize=\"xx-large\")\n",
    "\n",
    "ax[0].text(0.2, 0.8, r\"$x_b=0.7$\", fontsize=\"xx-large\")\n",
    "ax[0].text(0.6, 0.3, r\"$p(x_a, x_b)$\", fontsize=\"xx-large\")\n",
    "\n",
    "# 边缘分布\n",
    "\n",
    "xx = np.linspace(0, 1, 100)\n",
    "\n",
    "pa = norm.pdf(xx, loc=mu_a, scale = sigma_aa)\n",
    "\n",
    "ax[1].plot(xx, pa, 'b')\n",
    "\n",
    "pa_b = norm.pdf(xx, \n",
    "                loc = mu_a + sigma_ab / sigma_bb ** 2 * (0.7 - mu_a), \n",
    "                scale = np.sqrt(sigma_aa ** 2 - sigma_ab ** 2 / sigma_bb ** 2))\n",
    "\n",
    "ax[1].set_xlabel(r\"$x_a$\", fontsize=\"xx-large\")\n",
    "\n",
    "ax[1].set_xlim(0, 1)\n",
    "ax[1].set_ylim(0, 10)\n",
    "ax[1].set_xticks([0, 0.5, 1])\n",
    "ax[1].set_yticks([0, 5, 10])\n",
    "\n",
    "ax[1].text(0.2, 7, r\"$p(x_a|x_b=0.7)$\", fontsize=\"xx-large\")\n",
    "ax[1].text(0.2, 3, r\"$p(x_a)$\", fontsize=\"xx-large\")\n",
    "\n",
    "ax[1].plot(xx, pa_b, 'r')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.3.3 高斯变量的贝叶斯理论"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "之前提到 $p(\\mathbf x_a|\\mathbf x_b)$ 的均值是 $\\mathbf x_b$ 的线性函数。\n",
    "\n",
    "现在我们假设 $p(\\mathbf x)$ 是一个已知的高斯分布，而 $p(\\bf y|x)$ 是一个条件高斯分布，且其均值是 $\\bf x$ 的线性函数，方差与 $\\bf x$ 独立。这就是所谓的高斯线性模型（`linear Gaussian model`）：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "p(\\mathbf x)&=\\mathcal N(\\mathbf x~|~\\mathbf \\mu, \\mathbf \\Lambda^{-1}) \\\\\n",
    "p(\\mathbf y|\\mathbf x)&=\\mathcal N(\\mathbf y~|~\\mathbf{Ax+b}, \\mathbf L^{-1}) \\\\\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "其中 $\\mathbf \\mu, \\mathbf A, \\mathbf b$ 是均值的参数，$\\mathbf \\Lambda, \\mathbf L$ 是精确度矩阵。$\\mathbf{x,y}$ 的维度分别为 $M, D$，则 $\\mathbf A$ 的维度为 $D\\times M$。\n",
    "\n",
    "我们的目的是求 $p(\\mathbf y)$ 的分布。\n",
    "\n",
    "考虑它们的联合分布，令 $\\mathbf z=\\begin{pmatrix}\\mathbf x\\\\ \\mathbf y\\end{pmatrix}$，则：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\ln p(\\mathbf z)&=\\ln p(\\mathbf x) + \\ln p(\\mathbf{y|x}) \\\\\n",
    "&=-\\frac{1}{2}(\\mathbf{x-\\mu})^\\top\\mathbf\\Lambda(\\mathbf{x-\\mu})\n",
    "-\\frac{1}{2}(\\mathbf{y-Ax-b})^\\top\\mathbf L(\\mathbf{y-Ax-b}) + \\text{const}\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "为了得到 $\\mathbf z$ 的精确度矩阵，我们考虑二次项：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "& -\\frac{1}{2}\\mathbf x^\\top (\\mathbf\\Lambda + \\mathbf A^{\\text T}\\mathbf L\\mathbf A) \\mathbf x -\n",
    "\\frac{1}{2}\\mathbf y^\\top \\mathbf L\\mathbf y + \n",
    "\\frac{1}{2}\\mathbf y^\\top \\mathbf L\\mathbf A\\mathbf+ \n",
    "\\frac{1}{2}\\mathbf x^\\top \\mathbf A^\\top\\mathbf L\\mathbf y \\\\\n",
    "= & -\\frac{1}{2} \n",
    "\\begin{pmatrix}\n",
    "\\mathbf x\\\\\n",
    "\\mathbf y\n",
    "\\end{pmatrix}^\\top\n",
    "\\begin{pmatrix} \n",
    "\\mathbf\\Lambda + \\mathbf A^\\top\\mathbf L\\mathbf A & -\\mathbf A^\\top\\mathbf L \\\\\n",
    "-\\mathbf L\\mathbf A & \\mathbf L\n",
    "\\end{pmatrix}\n",
    "\\begin{pmatrix}\n",
    "\\mathbf x\\\\ \n",
    "\\mathbf y\n",
    "\\end{pmatrix} \\\\\n",
    "= & -\\frac{1}{2} \\mathbf {z^\\top Rz}\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "$\\mathbf z$ 的精确度矩阵为：\n",
    "\n",
    "$$\n",
    "\\mathbf{R} =\n",
    "\\begin{pmatrix} \n",
    "\\mathbf\\Lambda + \\mathbf A^\\top \\mathbf L\\mathbf A & -\\mathbf A^\\top \\mathbf L \\\\\n",
    "-\\mathbf L\\mathbf A & \\mathbf L\n",
    "\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "协方差矩阵为（使用 `Schur` 补的结论）：\n",
    "\n",
    "$$\n",
    "\\text{cov}[\\mathbf z]=\\mathbf{R}^{-1} = \\begin{pmatrix} \n",
    "\\mathbf\\Lambda + \\mathbf A^\\top\\mathbf L\\mathbf A & -\\mathbf A^\\top\\mathbf L \\\\\n",
    "-\\mathbf L\\mathbf A & \\mathbf L\n",
    "\\end{pmatrix}^{-1}\n",
    "= \\begin{pmatrix} \n",
    "\\mathbf\\Lambda^{-1} & \\mathbf\\Lambda^{-1}\\mathbf A^\\top\\\\\n",
    "\\mathbf A\\mathbf\\Lambda^{-1} & \\mathbf L^{-1}+\\mathbf A\\mathbf \\Lambda^{-1}\\mathbf A^\\top\n",
    "\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "考虑线性项：\n",
    "\n",
    "$$\n",
    "\\mathbf x^\\text{T}\\mathbf{\\Lambda\\mu}-\\mathbf x^\\top\\mathbf A^\\top\\mathbf{Lb} + \\mathbf y^\\top\\mathbf{Lb} = \n",
    "\\begin{pmatrix}\n",
    "\\mathbf x\\\\ \n",
    "\\mathbf y\n",
    "\\end{pmatrix}^\\top\n",
    "\\begin{pmatrix}\n",
    "\\mathbf{\\Lambda\\mu-A}^\\top\\mathbf{Lb}\\\\ \n",
    "\\mathbf{Lb}\n",
    "\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "我们有\n",
    "\n",
    "$$\n",
    "\\mathbb E[\\mathbf z]=\n",
    "\\mathbf R^{-1}\n",
    "\\begin{pmatrix}\n",
    "\\mathbf{\\Lambda\\mu-A^\\top Lb}\\\\ \n",
    "\\mathbf{Lb}\n",
    "\\end{pmatrix}\n",
    "= \\begin{pmatrix}\n",
    "\\mathbf{\\mu}\\\\ \n",
    "\\mathbf{A\\mu+b}\n",
    "\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "然后我们由边缘高斯分布的结论马上可以得到：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\mathbb E[\\mathbf y] &= \\mathbf{A\\mu+b} \\\\\n",
    "{\\rm cov} [\\mathbf y] &= \\mathbf L^{-1}+\\mathbf A\\mathbf \\Lambda^{-1}\\mathbf A^\\top\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "再来，我们由条件高斯分布的结论得到：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\mathbb E[\\mathbf{x|y}] &= (\\mathbf\\Lambda + \\mathbf A^\\top \\mathbf L\\mathbf A)^{-1}\\left\\{ \\mathbf A^\\top \\mathbf{L(y-b)} + \\mathbf{\\Lambda\\mu} \\right\\} \\\\\n",
    "{\\rm cov} [\\mathbf{x|y}] &= (\\mathbf\\Lambda + \\mathbf A^\\top\\mathbf L\\mathbf A)^{-1}\n",
    "\\end{align}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 结论"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "已知：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "p(\\mathbf x)&=\\mathcal N(\\mathbf x~|~\\mathbf \\mu, \\mathbf \\Lambda^{-1}) \\\\\n",
    "p(\\mathbf y|\\mathbf x)&=\\mathcal N(\\mathbf y~|~\\mathbf{Ax+b}, \\mathbf L^{-1}) \\\\\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "我们有\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "p(\\mathbf y)&=\\mathcal N(\\mathbf y~|~\\mathbf{A\\mu+b}, \\mathbf L^{-1}+\\mathbf A\\mathbf \\Lambda^{-1}\\mathbf A^\\top) \\\\\n",
    "p(\\mathbf x|\\mathbf y)&=\\mathcal N(\\mathbf y~|~\\mathbf \\Sigma\\left\\{ \\mathbf A^\\top \\mathbf{L(y-b)} + \\mathbf{\\Lambda\\mu} \\right\\}, \\mathbf \\Sigma) \\\\\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "其中 $\\mathbf \\Sigma = (\\mathbf\\Lambda + \\mathbf A^\\top\\mathbf L\\mathbf A)^{-1}$。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.3.4 高斯分布最大似然"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于一组独立同分布的高斯观测数据 $\\mathbf X=(x_1, \\dots,x_N)^\\text{T}$，\n",
    "高斯分布的似然函数为：\n",
    "\n",
    "$$\n",
    "\\ln p({\\bf X|\\mu,\\Sigma}) = -\\frac{ND}{2}\\ln (2\\pi)-\\frac{N}{2}\\ln|\\mathbf\\Sigma|-\\frac{1}{2}\\sum_{n=1}^N ({\\bf x_n-\\mu})^\\top\\mathbf\\Sigma^{-1}({\\bf x_n-\\mu})\n",
    "$$\n",
    "\n",
    "其充分统计量为\n",
    "\n",
    "$$\n",
    "\\sum_{n=1}^N \\mathbf x_n, \\sum_{n=1}^N \\mathbf x_n\\mathbf x_n^\\top\n",
    "$$\n",
    "\n",
    "考虑对 $\\mathbf\\mu$ 求偏导：\n",
    "\n",
    "$$\n",
    "\\frac{\\partial}{\\partial \\mathbf \\mu} \\ln p({\\bf X|\\mu,\\Sigma}) = \\sum_{n=1}^N \\mathbf\\Sigma^{-1} (\\bf x_n-\\mu)\n",
    "$$\n",
    "\n",
    "令其为零（严格来说要验证这是一个最大值点）：\n",
    "\n",
    "$$\n",
    "\\mathbf \\mu_{ML} = \\frac{1}{N} \\sum_{n=1}^N \\mathbf x_n\n",
    "$$\n",
    "\n",
    "所以最大似然的均值就是样本均值。\n",
    "\n",
    "协方差的最大似然是（可以求偏导，对矩阵求偏导的方法参见附录 C）\n",
    "\n",
    "$$\n",
    "{\\bf\\Sigma}_{ML} = \\frac{1}{N} \\sum_{n=1}^N (\\mathbf x_n-\\mathbf \\mu_{ML})(\\mathbf x_n-\\mathbf \\mu_{ML})^\\top\n",
    "$$\n",
    "\n",
    "另一方面，在真实的分布下，最大似然估计的均值为\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\mathbb E [\\mu_{ML}] & = \\mathbf \\mu \\\\\n",
    "\\mathbb E [\\Sigma_{ML}] & = \\frac{N-1}{N} \\bf \\Sigma\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "所以最大似然估计的协方差不是无偏估计，为此，可以使用\n",
    "\n",
    "$$\n",
    "\\mathbf{\\tilde\\Sigma}=\\frac{1}{N-1} \\sum_{n=1}^N (\\mathbf x_n-\\mathbf \\mu_{ML})(\\mathbf x_n-\\mathbf \\mu_{ML})^\\top\n",
    "$$\n",
    "\n",
    "来纠正。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.3.5 序列估计"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "序列化方法要求我们每次只处理一个数据，然后扔掉这个数据。\n",
    "这种方法在对于处理数据量很大（大到不能一次处理所有数据）的问题很重要。\n",
    "\n",
    "我们考虑从 $N-1$ 个观测数据到 $N$ 个观测数据时，均值的最大似然估计的变化：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\mu_{ML}^{(N)} & = \\frac{1}{N} \\sum_{n=1}^N \\mathbf x_n \\\\\n",
    "& = \\frac{1}{N} \\mathbf x_N + \\frac{1}{N} \\sum_{n=1}^N-1 \\mathbf x_n\\\\\n",
    "& = \\frac{1}{N} \\mathbf x_N + \\frac{N-1}{N} \\mu_{ML}^{(N-1)} \\\\\n",
    "& = \\mu_{ML}^{(N-1)} + \\frac{1}{N}(\\mathbf x_N - \\mu_{ML}^{(N-1)})\n",
    "\\end{align} \n",
    "$$\n",
    "\n",
    "这相当于在原来的均值的基础上，增加了一个误差项 $\\mathbf x_N - \\mu_{ML}^{(N-1)}$ 的变化；同时随着 $N$ 的增大，误差项调整的权重逐渐变小。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Robbins-Monro 算法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在上面的序列估计算法中，我们得到的是最大似然解的精确结果，而在很多情况下，我们并不一定能得到精确的结果。为此，我们引入 `Robbins-Monro` 算法。\n",
    "\n",
    "考虑联合分布 $p(z,\\theta)$，$z$ 关于 $\\theta$ 的条件分布的均值是一个关于 $\\theta$ 的函数：\n",
    "\n",
    "$$\n",
    "f(\\theta)\\equiv \\mathbb E[z|\\theta]=\\int zp(z|\\theta)dz\n",
    "$$\n",
    "\n",
    "我们的目的是找到一个 $\\theta^\\star$ 使得 $f(\\theta^\\star)=0$。\n",
    "\n",
    "对于这个问题，如果我们有很多 $z$ 和 $\\theta$ 的数据，我们可以建模来解决这个问题。\n",
    "\n",
    "不过，现在假设我们每次只观察一个 $z$ 值，然后根据这个值来更新我们对 $\\theta^\\star$ 的估计，为此，我们先假定 $z$ 的条件方差是有限的：\n",
    "\n",
    "$$\n",
    "\\mathbb E[(z-f)^2|\\theta]<\\infty\n",
    "$$\n",
    "\n",
    "并且不失一般性的假设 $f(\\theta)$ 在 $\\theta^\\star$ 附近是单调递增的。`Robbins-Monro` 过程给出：\n",
    "\n",
    "$$\n",
    "\\theta^{(N)} = \\theta^{(N-1)} + a_{N-1} z(\\theta^{(N-1)})\n",
    "$$\n",
    "\n",
    "其中 $z(\\theta^{(N)})$ 是 $z$ 在 $\\theta$ 取 $\\theta^{(N)}$ 时的观测值，参数 $a_N$ 满足：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\lim_{N\\to\\infty} a_N & = 0 \\\\\n",
    "\\sum_{N=1}^\\infty a_N & = \\infty \\\\\n",
    "\\sum_{N=1}^\\infty a_N^2 & < \\infty\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "第一个条件保证了收敛性；第二个条件保证了不会收敛到最优值附近的点；第三个条件保证误差项最终不会破坏收敛性。\n",
    "\n",
    "对于最大似然问题，我们要求\n",
    "\n",
    "$$\n",
    "\\frac{\\partial}{\\partial \\theta} \\left\\{\\left.\\frac{1}{N} \\sum_{n=1}^N \\ln p({x_n|\\theta}) \\right\\}\\right|_{\\theta_{ML}} = 0\n",
    "$$\n",
    "\n",
    "交换求和和偏导，并求极限有：\n",
    "\n",
    "$$\n",
    "\\lim_{N\\to\\infty}\\frac{1}{N} \\sum_{n=1}^N \\frac{\\partial}{\\partial \\theta}\\ln p({x_n|\\theta}) = \\mathbb E_x \\left[ \\frac{\\partial}{\\partial \\theta}\\ln p({x|\\theta})\\right]\n",
    "$$\n",
    "\n",
    "我们可以看到，最大化极大似然对应与寻找一个函数的根。`Robbins-Monro` 过程给出：\n",
    "\n",
    "$$\n",
    "\\theta^{(N)} = \\theta^{(N-1)} + a_{N-1} \\frac{\\partial}{\\partial \\theta^{(N-1)}}\\ln p({x_N|\\theta^{(N-1)}})\n",
    "$$\n",
    "\n",
    "如果 $\\theta$ 是均值，我们有\n",
    "\n",
    "$$\n",
    "z = \\frac{\\partial}{\\partial \\mu_{ML}}\\ln p({x|\\mu_{ML}, \\sigma^2}) = \\frac{1}{\\sigma^2} (x-\\mu_{ML})\n",
    "$$\n",
    "\n",
    "所以 $z$ 的分布是一个均值为 $\\mu-\\mu_{ML}$ 的高斯分布，我们相应的 $a_N$ 为 $\\frac{\\sigma^2}{N}$。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.3.6 高斯分布的贝叶斯估计"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "极大似然估计给出了均值和协方差矩阵的点估计，现在我们通过引入先验分布来考虑它的贝叶斯估计。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 均值未知，方差已知"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "考虑一维的高斯变量 $x$，并假设方差 $\\sigma^2$ 已知，有 $N$ 个数据点 $\\mathbf X=\\{x_1,\\dots,x_N\\}$，其似然函数为\n",
    "\n",
    "$$\n",
    "p(\\mathbf X|\\mu)=\\prod_{n=1}^N p(x_n|\\mu) =\\frac{1}{(2\\pi\\sigma^2)^\\frac{N}{2}} \n",
    "\\exp\\left\\{-\\frac{1}{2\\sigma^2} \\sum_{n=1}^N (x_n-\\mu)^2\\right\\}\n",
    "$$\n",
    "\n",
    "注意似然函数不是一个关于 $\\mu$ 的概率分布。\n",
    "\n",
    "考虑共轭性，我们引入一个高斯先验 $p(\\mu)$：\n",
    "\n",
    "$$\n",
    "p(\\mu)=\\mathcal N(\\mu|\\mu_0, \\sigma_0^2)\n",
    "$$\n",
    "\n",
    "因此后验分布为：\n",
    "\n",
    "$$\n",
    "p(\\mu|\\mathbf X) \\propto p(\\mathbf X|\\mu)p(\\mu)\n",
    "$$\n",
    "\n",
    "用上文类似的配方法可以得到：\n",
    "\n",
    "$$\n",
    "p(\\mu|\\mathbf X) = \\mathcal N(\\mu|\\mu_N,\\sigma_N^2)\n",
    "$$\n",
    "\n",
    "其中\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\mu_N & = \\frac{\\sigma^2}{N\\sigma_0^2 + \\sigma^2} \\mu_0 + \\frac{N\\sigma_0^2}{N\\sigma_0^2 + \\sigma^2} \\mu_{ML}\\\\\n",
    "\\frac{1}{\\sigma_N^2} & = \\frac{1}{\\sigma_0^2} + \\frac{N}{\\sigma^2}\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "其中\n",
    "\n",
    "$$\n",
    "\\mu_{ML} = \\frac{1}{N} \\sum_{n=1}^N x_n\n",
    "$$\n",
    "\n",
    "当 $N = 0$ 时，后验分布就是先验分布，当 $N\\to\\infty$ 时，后验分布的参数趋于最大似然的结果。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 均值已知，方差未知"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们使用精确度 $\\lambda\\equiv 1~/~\\sigma^2$ 来进行计算，其似然函数为：\n",
    "\n",
    "$$\n",
    "p(\\mathbf X|\\lambda)=\\prod_{n=1}^N \\mathcal N(x_n|\\mu,\\lambda^{-1}) \\propto \\lambda^{N/2} \\exp\\left\\{-\\frac{\\lambda}{2} \\sum_{n=1}^N(x_n-\\mu)^2\\right\\} \n",
    "$$\n",
    "\n",
    "考虑关于 $\\lambda$ 的共轭性，我们引入的先验分布为 `Gamma` 分布：\n",
    "\n",
    "$$\n",
    "\\mathrm{Gam}(\\lambda~|~a, b) = \\frac{1}{\\Gamma(a)} b^a {\\lambda^{a-1} \\exp(-b\\lambda)}, a > 0\n",
    "$$\n",
    "\n",
    "不同参数的 `Gam` 分布的图像如下图所示："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f742a3d6050>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy.stats import gamma\n",
    "\n",
    "x = np.linspace(0.01, 2, 100)\n",
    "\n",
    "fig, axes = plt.subplots(1, 3, figsize=(10, 2))\n",
    "\n",
    "A = [0.1, 1, 4]\n",
    "B = [0.1, 1, 6]\n",
    "\n",
    "for a, b, ax in zip(A, B, axes):\n",
    "    y = gamma.pdf(x, a = a, scale=1.0/b)\n",
    "    ax.plot(x, y, color=\"r\")\n",
    "    ax.set_ylim(0, 2)\n",
    "    ax.set_xticks([0, 1, 2])\n",
    "    ax.set_yticks([0, 1, 2])\n",
    "    ax.set_xlabel(r\"$\\lambda$\", fontsize=\"xx-large\")\n",
    "    ax.text(1, 1, \"$a={}$\\n$b={}$\".format(a, b), fontsize=\"xx-large\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "其均值和方差分别为：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\mathbb E[\\lambda] & = \\frac{a}{b}\\\\\n",
    "{\\rm var}[\\lambda] & = \\frac{a}{b^2}\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "给定先验分布 ${\\rm Gam}(\\lambda~|~a_0, b_0)$，后验分布为：\n",
    "\n",
    "$$\n",
    "p(\\lambda|\\mathbf X)\\propto\\lambda^{a_0-1}\\lambda^{N/2} \\exp\\left\\{-b_0\\lambda_0-\\frac{\\lambda}{2} \\sum_{i=1}^N (x_n-\\mu)^2\\right\\}\n",
    "$$\n",
    "\n",
    "从而这也是一个 `Gam` 分布 ${\\rm Gam}(\\lambda~|~a_N, b_N)$，其中：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "a_N & = a_0 + \\frac N 2 \\\\\n",
    "b_N & = b_0 + \\frac{1}{2} \\sum_{i=1}^N (x_n-\\mu)^2 = b_0 + \\frac{N}{2} \\sigma^2_{ML}\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "因此，我们看到，$N$ 个数据点向参数 $a$ 添加了 $\\frac N 2$ 的贡献，因此，我们可以认为初始状态向 $a$ 贡献了 $2a_0$ 个数据点；$N$ 个数据点向参数 $b$ 添加了 $\\frac{N}{2} \\sigma^2_{ML}$ 的贡献，我们可以认为这 $2a_0$ 个数据点平均每个贡献了 $2b_0/(2a_0)=b_0/a_0$ 的方差。\n",
    "\n",
    "如果直接考虑方差，而不是精确度，我们使用的先验将是逆 `Gamma` 分布。不过用精确度表示起来更加方便。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 均值和方差都未知"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在这种情况下，似然函数为：\n",
    "\n",
    "$$\n",
    "p(\\mathbf X|\\mu, \\lambda)=\\left(\\frac{\\lambda}{2\\pi}\\right)^\\frac{N}{2}\n",
    "\\exp\\left\\{-\\frac{\\lambda}{2} \\sum_{n=1}^N (x_n-\\mu)^2\\right\\}\n",
    "\\propto \\left[\\lambda^{1/2} \\exp\\left(-\\frac{\\lambda\\mu^2}{2}\\right)\\right]^N\n",
    "\\exp\\left\\{ \\lambda\\mu \\sum_{n=1}^N x_n - \\frac{\\lambda}{2} \\sum_{n=1}^N x_n^2 \\right\\}\n",
    "$$\n",
    "\n",
    "这是一个指数族函数（`exponential family`）的形式。\n",
    "\n",
    "由共轭性，考虑这样的先验分布：\n",
    "\n",
    "$$\n",
    "p(\\mu,\\lambda)\\propto \\left[\\lambda^{1/2} \\exp\\left(-\\frac{\\lambda\\mu^2}{2}\\right)\\right]^\\beta\n",
    "\\exp\\left\\{ c\\lambda\\mu  - d\\lambda \\right\\}\n",
    "= \\exp\\left\\{-\\frac{\\beta\\lambda}{2}(\\mu-c/\\beta)^2\\right\\} \\lambda^{\\beta/2}\n",
    "\\exp\\left\\{-\\left(d-\\frac{c^2}{2\\beta}\\right)\\lambda\\right\\}\n",
    "$$\n",
    "\n",
    "由于 $p(\\mu,\\lambda) = p(\\mu|\\lambda)p(\\lambda)$，通过观察我们发现：\n",
    "\n",
    "$$\n",
    "p(\\mu,\\lambda) = \\mathcal N(\\mu|\\mu_0, (\\beta\\lambda)^{-1}) \\mathrm{Gam}(\\lambda|a,b)\n",
    "$$\n",
    "\n",
    "其中 $\\mu_0 = c/\\beta, a=1+\\beta/2, b=d-c^2/(2\\beta)$。这个分布叫做高斯-伽马分布（`Gaussian-gamma`）或者正态-伽马分布（`normal-gamma`），其图像如图所示："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f742a2a9710>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy.stats import gamma\n",
    "\n",
    "mu, lam = np.mgrid[-2:2:.01, 0.01:2:.01]\n",
    "\n",
    "a, b = 5, 6\n",
    "mu_0 = 0\n",
    "beta = 2\n",
    "\n",
    "z = (beta*lam/2/np.pi) ** 1/2 * np.exp(- beta*lam/2 * (mu-mu_0)**2) \\\n",
    "    * gamma.pdf(lam, a=a, scale=1.0/b)\n",
    "    \n",
    "fig, ax = plt.subplots()\n",
    "\n",
    "ax.contour(mu, lam, z, colors='r')\n",
    "ax.set_xticks([-2, 0, 2])\n",
    "ax.set_yticks([0, 1, 2])\n",
    "\n",
    "ax.set_xlabel(r\"$\\mu$\", fontsize=\"xx-large\")\n",
    "ax.set_ylabel(r\"$\\lambda$\", fontsize=\"xx-large\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在 $D$ 维高斯分布 $\\mathcal N(\\mathbf x|\\mathbf\\mu, \\mathbf\\Lambda^{-1})$ 的情况下，若均值未知，精确度矩阵已知，先验分布为：\n",
    "\n",
    "$$\\mathcal N(\\mathbf \\mu|\\mathbf \\mu_0, \\mathbf\\Lambda_0^{-1})$$\n",
    "\n",
    "若均值已知，精确度矩阵未知，先验分布为 `Wishart` 分布：\n",
    "\n",
    "$$\n",
    "\\mathcal W(\\mathbf\\Lambda|\\mathbf W, \\nu)=B|\\mathbf\\Lambda|^{(\\nu-D-1)/2} \n",
    "\\exp\\left(-\\frac{1}{2}\\mathrm{Tr}(\\mathbf W^{-1}\\mathbf\\Lambda)\\right)\n",
    "$$\n",
    "\n",
    "其中 $\\nu$ 叫做分布的自由度（`degrees of freedom`），$\\mathbf W$ 是一个 $D\\times D$ 矩阵，$\\rm Tr$ 是矩阵的迹,归一化参数 $B$ 为\n",
    "\n",
    "$$\n",
    "B(\\mathbf W, \\nu) = |\\mathbf W|^{-\\nu/2}\n",
    "\\left(2^{\\mu D/2} \\pi^{D(D-1)/4} \\prod_{i=1}^D \n",
    "\\Gamma\\left(\\frac{\\nu+1-i}{2}\\right)\\right)^{-1}\n",
    "$$\n",
    "\n",
    "若均值和精确度矩阵都未知，先验分布为 `normal-Wishart`（或者 `Gaussian-Wishart`）分布：\n",
    "\n",
    "$$\n",
    "\\mathcal N(\\mathbf \\mu|\\mathbf \\mu_0, (\\beta\\mathbf\\Lambda)^{-1})\n",
    "\\mathcal W(\\mathbf\\Lambda|\\mathbf W, \\nu)\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.3.7 学生 t 分布"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "之前我们看到精确度的先验分布是一个 Gamma 分布。现在考虑一个单变量高斯分布 $\\mathcal N(x|\\mu,\\tau^{-1})$ 和精确度的一个伽马分布先验 ${\\rm Gam}(\\tau|a,b)$，我们对精确度进行积分之后，得到 $x$ 的边缘分布为\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "p(x|\\mu, a,b) & = \\int_{0}^{\\infty} \\mathcal N(x|\\mu,\\tau^{-1}) {\\rm Gam}(\\tau|a,b) d\\tau \\\\\n",
    "& = \\int_{0}^{\\infty} \n",
    "\\frac{b^a e^{-b\\tau} \\tau^{a-1}}{\\Gamma(a)} \n",
    "\\left(\\frac{\\tau}{2\\pi}\\right)^{1/2}\n",
    "\\exp\\left\\{-\\frac{\\tau}{2}(x-\\mu)^2\\right\\}\n",
    "d\\tau\\\\\n",
    "& =\n",
    "\\frac{b^a}{\\Gamma(a)} \\left(\\frac{1}{2\\pi}\\right)^{1/2}\n",
    "\\left[b+\\frac{(x-\\mu)^2}{2}\\right]^{-a-1/2} \\Gamma(a+1/2)\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "（关于 $\\tau$ 可以凑成一个 ${\\rm Gam}(a+1/2, b+\\frac{(x-\\mu)^2}{2})$ 的核）\n",
    "\n",
    "令参数 $\\nu=2a, \\lambda=a/b$，我们有 \n",
    "\n",
    "$$\n",
    "\\text{St}(x|\\mu,\\lambda,\\nu)= \\frac{\\Gamma(v/2+1/2)}{\\Gamma(v/2)} \\left(\\frac{\\lambda}{\\pi\\nu}\\right)^{1/2}\n",
    "\\left[1+\\frac{\\lambda(x-\\mu)^2}{\\nu}\\right]^{-\\nu/2-1/2}\n",
    "$$\n",
    "\n",
    "这就是学生 t 分布（`Student’s t-distribution`）。其中，参数 $\\lambda$ 叫做精确度，$\\mu$ 叫做自由度。\n",
    "\n",
    "当自由度为 1 时，学生 t 分布退化为柯西分布，当自由度趋于无穷时，学生 t 分布变成均值 $\\lambda$ 精度 $\\lambda$ 的高斯分布（忽略所有与 $x$ 无关的项，对 $\\nu$ 求极限，利用 $\\lim_{x\\to\\infty}(1+\\frac{1}{x})^x = e$）\n",
    "\n",
    "其概率密度函数如图所示："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f742a3bcfd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy.stats import t, norm\n",
    "\n",
    "xx = np.linspace(-5, 5, 100)\n",
    "\n",
    "dfs = [0.1, 1]\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "\n",
    "for df in dfs:\n",
    "    ax.plot(xx, t.pdf(xx, df))\n",
    "\n",
    "ax.plot(xx, norm.pdf(xx))\n",
    "\n",
    "ax.set_xlim(-5, 5)\n",
    "ax.set_xticks([-5, 0, 5])\n",
    "ax.set_ylim(0, 0.5)\n",
    "    \n",
    "ax.legend([r\"$\\nu=0.1$\", r\"$\\nu=1.0$\", r\"$\\nu\\to\\infty$\"], fontsize=\"xx-large\")\n",
    "ax.set_title(r\"$\\lambda=1,\\ \\mu=0$\", fontsize=\"xx-large\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "学生 t 分布可以看成是无穷多的高斯分布的一个混合。\n",
    "\n",
    "从图中可以看出，它产生的分布的尾巴要比高斯分布的长。事实上，在有异常值的情况下，它比高斯分布更鲁棒一些："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f742a464d90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy.stats import t, norm, uniform\n",
    "\n",
    "tt = norm.rvs(size=30)\n",
    "xx = np.linspace(-5, 10, 100)\n",
    "\n",
    "fig, axes = plt.subplots(1, 2, figsize=(10, 4))\n",
    "\n",
    "axes[0].hist(tt, \n",
    "             normed=True, \n",
    "             rwidth=0.5, \n",
    "             color=\"yellow\", \n",
    "             bins = np.linspace(-5, 10, 30))\n",
    "\n",
    "axes[0].set_xlim(-5, 10)\n",
    "axes[0].set_xticks([-5, 0, 5, 10])\n",
    "axes[1].set_ylim(0, 0.7)\n",
    "\n",
    "l, s = norm.fit(tt)\n",
    "\n",
    "axes[0].plot(xx, norm.pdf(xx, loc=l, scale=s), 'g')\n",
    "\n",
    "d, l, s = t.fit(tt)\n",
    "axes[0].plot(xx, t.pdf(xx, df=d, loc=l, scale=s), 'r')\n",
    "\n",
    "axes[0].legend([\"MLE for Gaussian\", \"MLE for t\"])\n",
    "\n",
    "\n",
    "tt1 = np.hstack([tt, uniform.rvs(size=4, loc=8, scale=2)])\n",
    "\n",
    "axes[1].hist(tt1, \n",
    "             normed=True, \n",
    "             rwidth=0.5, \n",
    "             color=\"yellow\",\n",
    "             bins = np.linspace(-5, 10, 30))\n",
    "\n",
    "axes[1].set_xlim(-5, 10)\n",
    "axes[1].set_ylim(0, 0.7)\n",
    "axes[1].set_xticks([-5, 0, 5, 10])\n",
    "\n",
    "l, s = norm.fit(tt1)\n",
    "\n",
    "axes[1].plot(xx, norm.pdf(xx, loc=l, scale=s), 'g')\n",
    "\n",
    "d, l, s = t.fit(tt1)\n",
    "axes[1].plot(xx, t.pdf(xx, df=d, loc=l, scale=s), 'r')\n",
    "\n",
    "axes[1].legend([\"MLE for Gaussian\", \"MLE for t\"])\n",
    "\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果我们取 $\\nu=2a, \\lambda=a/b, \\eta=\\tau b /a$，我们有：\n",
    "\n",
    "$$\n",
    "\\mathrm{St}(x|\\mu,\\lambda,\\nu) = \\int_{0}^{\\infty} \\mathcal N(x~|~\\mu,(\\eta\\lambda)^{-1}) {\\rm Gam}(\\eta ~|~\\nu/2,\\nu/2) d\\eta\n",
    "$$\n",
    "\n",
    "（这也说明了学生 t 分布是一个概率分布：对 $x$ 积分等于 1。）\n",
    "\n",
    "我们看到，自由度项只在 Gamma 分布出现，因此，我们可以将其推广到高维形式：\n",
    "\n",
    "$$\n",
    "\\mathrm{St}(x|\\mathbf{\\mu,\\Lambda},\\nu) = \\int_{0}^{\\infty} \\mathcal N(x~|~{\\mathbf \\mu,(\\eta\\mathbf\\Lambda)^{-1}}) {\\rm Gam}(\\eta ~|~\\nu/2,\\nu/2) d\\eta\n",
    "$$\n",
    "\n",
    "与一维的结果类似，我们有：\n",
    "\n",
    "$$\n",
    "\\mathrm{St}(x|\\mathbf{\\mu,\\Lambda},\\nu) = \\frac{\\Gamma(v/2+D/2)}{\\Gamma(v/2)} \\frac{|\\mathbf\\Lambda|^{1/2}}{(\\pi\\nu)^{D/2}}\n",
    "\\left[1+\\frac{\\Delta^2}{\\nu}\\right]^{-\\nu/2-D/2}\n",
    "$$\n",
    "\n",
    "其中 $\\Delta^2 \\mathbf{= (x -\\mu)^\\top\\Lambda(x - \\mu)}$。\n",
    "\n",
    "学生 t 分布的均值方差和众数分别为：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\mathbb E[\\mathbf x] & = \\mathbf \\mu & {\\rm if} && \\nu > 1\\\\\n",
    "{\\rm cov}[\\mathbf x] & = \\frac{\\nu}{\\nu-2} \\mathbf\\Lambda^{-1} & {\\rm if} && \\nu > 2 \\\\\n",
    "{\\rm mode}[\\mathbf x] & = \\mathbf \\mu \\\\\n",
    "\\end{align}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.3.8 周期变量和 von Mises 分布"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "高斯分布并不能很好的解决周期变量的问题。\n",
    "\n",
    "对于周期变量，一种解决方法是使用极坐标系 $0\\leq\\theta<2\\pi$ 的周期性，使用极坐标的角度 $\\theta$ 表示周期变量。\n",
    "\n",
    "在极坐标系下，我们需要考虑这样的问题，两个角度 $1^\\circ, 359^\\circ$ 十分接近，如果我们选择 $0^\\circ$ 作为原点，均值和标准差分别为 $180^\\circ, 179^\\circ$；选择 $180^\\circ$ 作为原点，均值和标准差分别为 $0^\\circ, 1^\\circ$。因此我们需要一种解决这种问题的特殊方法。\n",
    "\n",
    "考虑找到一组周期变量 $\\mathcal D=\\{\\theta_1,\\dots, \\theta_N\\}$ 的均值的问题。之前我们看到，随着坐标系的变化，直接计算的方法的结果也在变化。\n",
    "\n",
    "为了找到一种不随坐标原点变化的均值衡量方法，我们将这些变量看成是单位圆上的点，即将角度 $\\theta$ 映射为点 $\\mathbf x$："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nwhkqpUrBwIEwZIjrSkREjvfii/A//xPaOd/wTdTnysqChg1h0iRo3dp1NRICmqiXEvviC9uovWED\nVKrkupqSSKKJ+lxly8L/+38arYiIf/zhDzBgQNADpUDhHakAZGbCOefA7NnQrJnraiTgNFKRElm+\nHDp2tM3ZwQ+VJBypAJxyiq2w+L//c12JiCS7p56CJ54IQ6AUKNwjFYB9+2y0snSpHeEiUkwaqUix\npaZC9+52JEuFCq6r8UKSjlQAqlSBX/8afv9715WISLL6/e/hd78LS6AUKPwjFYCDB6FRI/j3v6FV\nK9fVSEBppCLFsmiR3Zfy5ZdQrpzrarySxCMVsB7ms8/aqgv9UBCRRInFbITy9NNhCpQCJUeoANx1\nl82vvPOO60pEJFl8+CFs2wa33+66koRJjvZXrjlz4KGHYNWqpHnVIN5R+0uKJBq1jdePPgq33uq6\nGq8lefsrV4cOcO65do+BiEg8jR0LZcrALbe4riShkmukArByJVx7rR2XUL2662okQDRSkULbswfO\nOw9mzoQWLVxXEw/5jlSSL1TA7rKvWhWee851JRIgChUptIcesms4Ro1yXUm8KFSOs20bNG1qG5LO\nOcd1NRIQChUplE8/hS5dYM2aMHdDNKdynFq14De/gf79tcRYRLwTjdrPlcGDwxwoBUrOUAELla1b\n4Z//dF2JiITFP/5hb3/5S5dVOJWc7a9cqanwi1/AihVw+umuqxGfU/tLCpSebpPz770Hl1ziupp4\n05xKvgYMgB07YPx415WIzylUpED9+1v766WXXFeSCAqVfB08aHetjBoF11/vuhrxMYWK5GvJEujW\nDVavhtNOc11NImiiPl+VKsGYMdCvH+zf77oaEQmagwfhzjvthWlyBEqBNFLJ1bcvnHoqDB/uuhLx\nKY1U5IQefhj27oU33nBdSSKp/XVSe/bABRfAlCnQpo3rasSHFCryE7Nnw7332lXB1aq5riaR1P46\nqdNOg2HD4J577G57EZGCpKfbz4uxY5MtUAqkkUpesRjcdpt9gyTHCg4pAo1U5Dh9+kCNGsnaMs93\npFImkVX4XiRiJxhffDFMngw9e7quSET86K234JNPIC3NdSW+o5HKiaSm2tk9S5dC/fquqxGf0EhF\nADs78KKLYPr0ZL6eXHMqRdKyJTzxhF2sk5XluhoR8Yto1OZR+vVL5kApkEYq+YlG7QiXpk3hz392\n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\n8t2/Z/wAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f7423754550>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "xx = np.linspace(0, 2 * np.pi, 100)\n",
    "\n",
    "_, ax = plt.subplots(figsize=(7, 7))\n",
    "\n",
    "ax.plot(np.cos(xx), np.sin(xx), 'r')\n",
    "\n",
    "ax.text(1, -0.2, \"$x_1$\", fontsize=\"xx-large\")\n",
    "ax.text(1, 0.2, \"$x_2$\", fontsize=\"xx-large\")\n",
    "ax.text(0.2, 1, \"$x_3$\", fontsize=\"xx-large\")\n",
    "ax.text(-0.4, 1, \"$x_4$\", fontsize=\"xx-large\")\n",
    "\n",
    "ax.axis(\"equal\")\n",
    "ax.set_xlim(-1.2, 1.2)\n",
    "\n",
    "ax.spines['right'].set_color('none')\n",
    "ax.spines['top'].set_color('none')\n",
    "\n",
    "ax.xaxis.set_ticks_position('bottom')\n",
    "ax.spines['bottom'].set_position(('data',0))\n",
    "ax.yaxis.set_ticks_position('left')\n",
    "ax.spines['left'].set_position(('data',0))\n",
    "\n",
    "ax.set_xticks([])\n",
    "ax.set_yticks([])\n",
    "\n",
    "ax.plot([0, 0.4], [0, 0.6])\n",
    "ax.text(0.12, 0.3, r'$\\bar r$', fontsize=\"xx-large\")\n",
    "ax.text(0.42, 0.55, r'$\\bar x$', fontsize=\"xx-large\")\n",
    "ax.text(0.35, 0.2, r'$\\bar{\\theta}$', fontsize=\"xx-large\")\n",
    "\n",
    "tt = np.linspace(0.2, np.sqrt(0.2 ** 2 + 0.3 ** 2))\n",
    "\n",
    "ax.fill_between([0, 0.2], [0, 0.3], color=\"c\")\n",
    "ax.fill_between(tt, np.sqrt(0.2 ** 2 + 0.3 ** 2 - tt ** 2 + 0.001), color=\"c\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们不直接求 $\\theta$ 的均值，而是求这些点 $\\bf x$ 的均值：\n",
    "\n",
    "$$\n",
    "\\mathbf{\\bar x} = \\frac{1}{N} \\sum_{n=1}^N \\mathbf x_n\n",
    "$$\n",
    "\n",
    "然后得到相应的极坐标的角度 $\\bar\\theta$。\n",
    "\n",
    "这样的设定能保证我们的均值 $\\bf \\bar x$ 不随极坐标的原点设置变化而变化。一般来说，这个均值通常落在单位圆内。\n",
    "\n",
    "考虑坐标变换，$\\mathbf x_n = (\\cos\\theta_n,\\sin\\theta_n), \\mathbf{\\bar x}=(\\bar r\\cos\\bar\\theta, \\bar r\\sin\\theta)$，我们有：\n",
    "\n",
    "$$\n",
    "\\bar r\\cos\\bar\\theta = \\frac{1}{N} \\sum_{n=1}^N \\cos\\theta_n, \\bar r\\sin\\theta \\frac{1}{N} \\sum_{n=1}^N \\sin\\theta_n\n",
    "$$\n",
    "\n",
    "利用正切函数，我们有：\n",
    "\n",
    "$$\n",
    "\\bar\\theta = \\tan^{-1} \\frac{\\sum_n \\sin\\theta_n}{\\sum_n \\cos\\theta_n}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### von Mises 分布"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于周期函数，我们考虑一个周期为 $2\\pi$ 的概率分布 $p(\\theta)$，它应当满足这三个条件：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "p(\\theta) & \\geq 0 \\\\\n",
    "\\int_{0}^{2\\pi} p(\\theta) & =1 \\\\\n",
    "p(\\theta+2\\pi) &= p(\\theta)\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "按照单位圆的设定，我们可以假定 $\\mathbf x=(x_1,x_2)$ 满足一个高斯分布 $\\mathcal N(\\mathbf\\mu, \\sigma^2\\mathbf I)$，其中 $\\mathbf\\mu=\\mu_1,\\mu_2$，所以：\n",
    "\n",
    "$$\n",
    "p(x_1,x_2) = \\frac{1}{2\\pi\\sigma^2} \\exp\\left\\{-\\frac{(x_1-\\mu_1)^2 + (x_2-\\mu_2)^2}{2\\sigma^2}\\right\\}\n",
    "$$\n",
    "\n",
    "它的分布等高线是一系列的圆："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZQAAAGUCAYAAAASxdSgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4lEXXBvB7IXSQUKX33kG60pWuIAIiiIioFAtVERsv\n+orSVRAEy6sIWECqiAhShdCJ1A8JEHqREiEkISQ73x+3VENIefZ5tty/69oraMLOgYQ9OzNnzriM\nMRAREUmtNE4HICIi/kEJRURELKGEIiIillBCERERSyihiIiIJYLu8nmVgInXcrlcUJWiiCNcCf1P\nzVBERMQSSigiImIJJRQREbGEEoqIiFhCCUVERCyhhCIiIpZQQhEREUsooYiIiCWUUERExBJKKCIi\nYgklFBERsYQSioiIWEIJRURELKGEIiIillBCERERSyihiIiIJZRQRETEEne7sVHEMh999BGioqKw\nfft2jBgxAnPnzoUxBhcuXMC4ceOcDk9EUkkzFLHFxx9/jJYtW2LYsGFo3rw5GjdujJ49e+LKlSuY\nMWMGAGD27NkYP348evTogU8++cThiEUkuTRDEVvEx8ejbNmyAIBjx46hevXqKFCgAPr06YPu3bvj\n4MGDiIyMxKBBg3DlyhWUK1cONWrUQL169RyOXESSSjMUscXAgQOv/3rNmjVo3LgxAKBgwYIoU6YM\ndu7cieHDhwMAMmTIgFq1amHdunVOhCoiKaSEIraKjY3Fhg0b0KhRo1v+f5s2bfDzzz9f/+/jx4+j\nXLlydocnIqmghCIeFxcXh5UrVwIAQkJCAAC1atUCAJw9exYzZ85EUFAQKlWqBAAIDQ0FALRt29aB\naEUkpZRQxOOmTZuG1q1bIzo6GosWLUKuXLkQFMTtu0mTJqFNmzbXvzYmJgajR4/GggULnApXRFLI\nZYxJ7POJflIkKXbt2oX3338fJUuWRMuWLbF06VJERkYic+bM6NSpE6pUqXL9a0eMGIG+ffsib968\nCA8PR7Fixe74vC6XC3f5+RURz3Al+D+VUMRbTJ06FdWrV0fRokURHR2NDRs2oEuXLnf8eiUUEcck\nmFBUNixeYd26dXjhhRdgjIExBi6XC2vWrHE6LBFJBs1QxGdphiLimARnKNqUFxERSyihiIiIJZRQ\nRETEEkooIiJiCSUUERGxhBKKiIhYQglFREQsoYQiIiKWUEIRERFLKKGIiIgllFBERMQSSigiImIJ\n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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f742a3b8810>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "xx = np.linspace(0, 2 * np.pi, 100)\n",
    "\n",
    "_, ax = plt.subplots(figsize=(7, 7))\n",
    "\n",
    "ax.plot(np.cos(xx), np.sin(xx), 'r')\n",
    "\n",
    "ax.spines['right'].set_color('none')\n",
    "ax.spines['top'].set_color('none')\n",
    "\n",
    "ax.xaxis.set_ticks_position('bottom')\n",
    "ax.spines['bottom'].set_position(('data',0))\n",
    "ax.yaxis.set_ticks_position('left')\n",
    "ax.spines['left'].set_position(('data',0))\n",
    "ax.set_xticks([])\n",
    "ax.set_yticks([])\n",
    "\n",
    "mu1, mu2 = 0.5, 0.8\n",
    "for r in [0.25, 0.5, 0.75]:\n",
    "    ax.plot(r * np.cos(xx) + mu1, r * np.sin(xx) + mu2, 'b')\n",
    "    \n",
    "ax.axis('equal')\n",
    "ax.set_xlim(-1.5, 2)\n",
    "ax.text(1.35, 1, r\"$p(\\mathbf{x})$\", fontsize=\"xx-large\")\n",
    "ax.text(-1,-1, r'$r=1$', fontsize=\"xx-large\")\n",
    "ax.text(1.8, -.2, \"$x_1$\", fontsize=\"xx-large\")\n",
    "ax.text(-.2, 1.8, \"$x_2$\", fontsize=\"xx-large\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "考虑极坐标的变换：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "x_1 = r\\cos\\theta, &&& x_2 = r\\sin\\theta \\\\\n",
    "\\mu_1 = r_0\\cos\\theta_0, &&& \\mu_2 = r_0\\sin\\theta_0\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "并将 $\\mathbf x$ 限制在单位圆上即 $r=1$，我们有：\n",
    "\n",
    "$$\n",
    "-\\frac{1}{2\\sigma^2}\\left\\{(\\cos\\theta-r_0\\cos\\theta_0)^2 + (\\sin\\theta-r_0\\sin\\theta_0)^2\\right\\} = \n",
    "-\\frac{1}{2\\sigma^2}\\left\\{1 + r_0^2 -2r_0\\cos\\theta\\cos\\theta_0 -2r_0\\sin\\theta\\sin\\theta_0\\right\\} = \n",
    "\\frac{r_0}{\\sigma^2} \\cos(\\theta-\\theta_0) + \\mathrm{const}\n",
    "$$\n",
    "\n",
    "常数是与 $\\theta$ 无关的项。\n",
    "\n",
    "如果我们定义 $m=\\frac{r_0}{\\sigma^2}$，我们可以得到这样的一个分布：\n",
    "\n",
    "$$\n",
    "p(\\theta|\\theta_0,m) = \\frac{1}{2\\pi I_0(m)}\\exp\\{m\\cos(\\theta-\\theta_0)\\}\n",
    "$$\n",
    "\n",
    "这样我们就得到了 von Mises 分布，或者叫 `circular normal` 分布，这里 $\\theta_0$ 是分布的均值，$m$ 类似于高斯分布中的精确度。\n",
    "\n",
    "von Mises 分布在直角坐标系和极坐标系的图像如图所示："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f742342ba90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy.stats import vonmises\n",
    "\n",
    "tt = np.linspace(0, 2 * np.pi, 100)\n",
    "\n",
    "fig, axes = plt.subplots(1, 2, figsize=(10, 4))\n",
    "\n",
    "axes[0].plot(tt, vonmises.pdf(tt, 5, loc=np.pi/4), 'r')\n",
    "axes[0].plot(tt, vonmises.pdf(tt, 1, loc=3*np.pi/4), 'b')\n",
    "axes[0].set_xlim(0, 2*np.pi)\n",
    "axes[0].legend([r'$m=5,\\ \\theta_0=\\pi/4$', r'$m=1,\\ \\theta_0=3\\pi/4$'], fontsize=\"x-large\", loc=0)\n",
    "\n",
    "for ax in axes:\n",
    "    ax.set_xticks([])\n",
    "    ax.set_yticks([])\n",
    "    \n",
    "ax = fig.add_subplot(122, projection='polar')\n",
    "ax.set_axis_off()\n",
    "\n",
    "ax.plot(tt, vonmises.pdf(tt, 5, loc=np.pi/4), 'r')\n",
    "ax.plot(tt, vonmises.pdf(tt, 1, loc=3*np.pi/4), 'b')\n",
    "ax.legend([r'$m=5,\\ \\theta_0=\\pi/4$', r'$m=1,\\ \\theta_0=3\\pi/4$'], fontsize=\"x-large\", loc=0)\n",
    "ax.grid(\"off\")\n",
    "\n",
    "ax.plot([0, np.pi/4], [0, 1], 'k')\n",
    "ax.plot([0, 0], [0, 1], 'k')\n",
    "ax.plot([0, 3*np.pi/4], [0, 1], 'k')\n",
    "ax.text(0.1, 0.8, r'$0$', fontsize=\"x-large\")\n",
    "ax.text(-0.2, 0.8, r'$2\\pi$', fontsize=\"x-large\")\n",
    "ax.text(0.3*np.pi, 1, r'$\\pi / 4$', fontsize=\"x-large\")\n",
    "ax.text(0.7*np.pi, 0.8, r'$3\\pi / 4$', fontsize=\"x-large\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$I_0(m)$ 是用来归一化概率分布的常数，是修正的 0 阶 Bessel 函数：\n",
    "\n",
    "$$\n",
    "I_0(m) =\\frac{1}{2\\pi} \\int_{0}^{2\\pi} \\exp\\{m\\cos\\theta\\} d\\theta\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nKguqaKvK4SQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f7423809f90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy import special\n",
    "\n",
    "_, ax = plt.subplots()\n",
    "\n",
    "xx = np.r_[0:10:0.01]\n",
    "\n",
    "ax.plot(xx, special.i0(xx), 'r')\n",
    "ax.set_xlabel(\"$m$\", fontsize='x-large')\n",
    "ax.set_ylabel(\"$I_0(m)$\", fontsize='x-large')\n",
    "ax.set_xticks([0, 5, 10])\n",
    "ax.set_yticks(np.r_[0:3001:1000])\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在考虑 `von Mises` 分布的最大似然：\n",
    "\n",
    "$$\n",
    "\\ln p(\\mathcal D|\\theta_0,m) = -N\\ln(2\\pi)-N\\ln I_0(m) + m\\sum_{n=1}^N \\cos(\\theta_n-\\theta_0) \n",
    "$$\n",
    "\n",
    "令其对 $\\theta_0$ 的偏导为 0，我们有\n",
    "\n",
    "$$\n",
    "\\sum_{n=1}^N \\sin(\\theta_n-\\theta_0) = \\cos\\theta_0 \\sum_{n=1}^N \\sin\\theta_n - \\sin\\theta_0 \\sum_{n=1}^N \\cos\\theta_n = 0\n",
    "$$\n",
    "\n",
    "从而\n",
    "\n",
    "$$\n",
    "\\theta_{ML} = \\tan^{-1} \\left\\{\\frac{\\sum_{n} \\sin \\theta_n}{\\sum_{n} \\cos \\theta_n}\\right\\}\n",
    "$$\n",
    "\n",
    "这与我们之前讨论的均值一致。\n",
    "\n",
    "类似地，考虑对 $m$ 的偏导，利用 $I_0'(m) = I_1(m)$（$I_1$ 是修正的 1 阶 Bessel 函数），我们有：\n",
    "\n",
    "$$\n",
    "\\frac{I_1(m)}{I_0(m)} = \\frac{1}{N} \\sum_{n=1}^N \\cos(\\theta_n-\\theta_0) \n",
    "$$\n",
    "\n",
    "令\n",
    "\n",
    "$$\n",
    "A(m) = \\frac{I_1(m)}{I_0(m)}\n",
    "$$\n",
    "\n",
    "其图像如下图所示。\n",
    "\n",
    "因此，我们有\n",
    "\n",
    "$$\n",
    "A(m_{ML}) = \\frac{1}{N} \\cos\\theta_0^{ML} \\sum_{n=1}^N \\cos\\theta_n - \\frac{1}{N} \\sin\\theta_0^{ML} \\sum_{n=1}^N \\sin\\theta_n \n",
    "$$\n",
    "\n",
    "我们可以通过数值的方法来求 $m_{ML}$ 的值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n2fgvWwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f7423b991d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "_, ax = plt.subplots()\n",
    "\n",
    "xx = np.r_[0:10:0.01]\n",
    "\n",
    "ax.plot(xx, special.i1(xx) / special.i0(xx), 'r')\n",
    "\n",
    "ax.set_xlabel(\"$m$\", fontsize='x-large')\n",
    "ax.set_ylabel(\"$A(m)$\", fontsize='x-large')\n",
    "ax.set_xticks(np.r_[0:11:5])\n",
    "ax.set_yticks(np.r_[0:1.1:0.5])\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.3.9 高斯混合模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "之前说到，高斯分布是一个单峰模型，对于多峰情况的模拟效果并不好。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk8AAAD7CAYAAABzA3AkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd0VFUXxfekzkASpISqJBRFiiBVRBFQQBQQVCzgpyCI\noIIKgiKCohQRBBWpKoIFAoIIgkAg9B56C6En9CSQAAmkz/7+uMxkJvPeJIFJSDm/WbOM7913X9HZ\n67x7z93HQBKCIAiCIAhC9nC72xcgCIIgCIJQkJDgSRAEQRAEIQdI8CQIgiAIgpADJHgSBEEQBEHI\nARI8CYIgCIIg5AAJngRBEARBEHKAR16dyGAwiCeCIBRBSBru9jXcKaJfglA00dOvPB15Ipmt7xdf\nfJHttkXlK89EnkdBfB6FicLw30P+/8wfX3keBeN5OEOm7QRBEARBEHKABE+CIAiCIAg5IF8GTy1b\ntrzbl5DvkGdijzwPe+R55C/kv4c98jzskedhT0F8Hoas5vVcdiKDgXl1LkEQ8gcGgwEsJAnjol+C\nULRwpl/5cuRJEARBEAQhvyLBkyAIgiAIQg6Q4EkQBEEQBCEHSPAkCIIgCIKQAyR4EgRBEARByAES\nPAmCIAiCIOQACZ4EQRAEQRBygARPgiAIgiAIOUCCJ0EQBEEQhBwgwZMgCIIgCEIOkOBJEARBEAQh\nB0jwJAj5jBjEYCd2IgYxLu03LQ2IjweSk13arSAIgpXc0q/8hgRPgpCPCEIQAhCANmiDAAQgCEG3\n1U9sLPD338BHHwGtWgEVKgAmk/qnry9Qvjzw6qvA+vWuvX5BEIourtKvgoAhryqFS1VyQXBODGIQ\ngAAkItG6zQQTIhEJf/hnefyZM8CCBcA//wAHDgCPPQY0bw40agTUqqUCJ3d3wGwGzp0DVqwAvv4a\neO01YPTo3LknZ1XJCxKiX4LgnDvVr/yIM/3yyOuLEQRBmwhEwAteduLjCU9EIEJXfG7cUAHTrFnA\n4cPA888Dw4ap0SZvb+3zuLkBlSsDffoAL70ENG2qvh075sZdCYJQFLgd/SrISPAkCHeZGMQgAhHw\ngQ9SkGK3LwUpCESgwzFHjwLfTrmJv+Z4oWmzdHz4oTfatwe8vHJ27lKlgDFjgAkTJHgSBCHnONOv\nZCTDBz5ZHhuIwAIXYEnOkyDcRWxzBBqiIXqhFzzhad1vhhkhCAEAkMC6dUCHDkCTJ5Iw23cyuPdh\nbFpaEknPB+U4cLLwzDNAaKhKKBcEQcguWvplgglGGAEAbnBDQzTUzH0q6PlRkvMkCHcJrRwBi+gk\nISljm7kYZiy9gMmjS+D6daD3wHgMez0ASaY4a5s7zS3w9QXOnwf8/G7zZnSQnCdBKJzo5Titxmo8\nhaeQjGS77bb6VFDyo5zpl4w8CcJdwpIjYIv7rQ8AwGwAFr6IlId34OuvPDBkCBAWBjzxdji8TWa7\n4yy5BbdDejqQkqKfIyUIgpAZLf3yhCdO4IT1JdB2u60+6R17uxp2N5CcJ0G4SwQi0CFHIB3pAA3A\nv88Bn38FeKXAY+xwbHjmJ5Q1FNc9LhWpmrlR2eHMGaBMGQmeBEHIPno61ARNstQnV2vY3UBGngTh\nLuEPf8zETJhggh/8YIIJgzcsxb3NzsAwfBRMI7+GMbQFZj/7Msoa/J0eNxMzb3u4OzRU2RkIgiBk\nRXq6Mts1JfjjFzrqUE3UzFKfXK1hdwPJeRKEu0wMYrDm8CX8+skDOBHmjZEjgdZdY3DGzfkqFFet\nVHnrLeChh4APPrjtLnSRnCdBKLgkJABr1wIbNwK7dwPh4cDly2qU2mxWi0wCqqahysPX0KalF7q/\n4IuyZdWx2dGn/L7azpl+ZTt4MhgMMwF0ABBFsu6tbSUBzAcQACACwMskr+kcL+IjCJmIigK++AJY\ntAj49FPg3Xftp89yW1zS0oCKFYEdO4AqVVzefb4Knu5Ew0S/hKICqQKmX34Bli8HGjdWvnGNGwM1\nayqzXY9bCT+JicDJk8CuXcDq1cB//wFt2yqvubp1VZv8HiA5w1UJ47MAPJ1p2xAAISRrAFgL4NPb\nu0RBKDxo1XbKvC05GRg/HqhdW5VNOXoUGDDAPnDKi6W8K1cC1arlTuCUDxENEwQdzGZluFu7bhr6\nDriJeo/H49QpICQE+OwzoH7bGFy6byfiPDJ0zWQC6tQBevQA5swBzp4FHnkEaNNG6dlviX8VaDsC\np5DM9hfq7eyAzb+HAyh36+/yAMKdHEtBKOzM5VyaaGIJlqCJJs699bHdNnjZelavTrZvTx49qt1P\nNKNpoomw+ZhoYjSjXXq9HTqQv/zi0i7tuPW7z5HO5Ob3djVM9EsozGzZQjZsSFZpeJleyzvRz5yh\nX6S2rjkjJobs/EoiDfX3EqcDclXDchNn+pWjnCeDwRAAYCkzhrxjSZay2W/375mOZU7OJQgFDT3f\nJgMMatvJqsAHP8Bw/AEE/VAWr7S7R7evndiJNmiDa8iYQfKDH0IQgsZo7JLrPX4caNYMiIwEihVz\nSZcO5KdpO+D2NUz0SyiM3LgBDB4MLF4MDB9/HQO7VkCS203rfhNM2I3daIiGOfZkCuVOtJi4BEmT\negPrWwJVIlyuYblNXvo8iboIRRY93yZDkgkY8QXwyA6g+Sb4HGyGqu2OO+3rdpfyak0Z6jF+PNC3\nb+4FTgUU0TChSLBvH1C/vgqgwsKARq8dhbebp10bT3giFKG35clUxRAIw0cTgU++AVqHAFdKuVzD\n7iZ36vMUZTAYypGMMhgM5QFEO2s8YsQI698tW7ZEy5Yt7/D0gnD3cVqbLrglUt/7AXh4L7C3PnDf\nOaTBhEAEOk2k9Ic/eqEXJmOydVsv9HL6pheEIPRCL3jBCylIwUzMRFd01WwbGQksXAgcO3YHN67B\n+vXrsX79etd2mrtkW8NEv4TCwh9/AAMHAj/+CDz1agyO6+hXKlJRHdXtKh5Ytmdbw96dDJyqCrw2\nBz2XL4e/m2s0LDfIkX7pzedpfQEEAjho8+/fAPjk1t+fABjr5NjcmpYUhFwlmtEMZajmXL1tLoAX\nvehGNzW7f7EcDa8GEVVO0eu/zna5S570ZD/2c5pDkNOcp5y279mTHDr0zp9NViD/5TzdloaJfgkF\nGYuGRZmjOXw4WaUKeeiQE/0i6EUvq0550UttTfYk0g3sx35Z5kHZaVKqO9FkOz1nvOcyDcsLnOlX\nTkRnLoALAJIBnAHwJoCSAEIAHAWwCsA9To7Pw1sWBNfgTCC0fuxINxA/vUX4RxGffE3cyLRf55NZ\nJEIZyhIsYdfGj34MZajmdeak/aFDpL8/GRfn+ueVmfwUPN2Jhol+CQUVi4b5pZWk+9u/sGqjy4yK\n0tEvm4/X5Qr0nNmH6PYnUfMw4Z1IuKcSbmlE+Yt0a7Oa+HYgcaF89jRsX10aykZx7dXdmteZU83L\nC5zpV7an7Uh209nVOrt9CEJBIgYx6IVeSLz1AdTUWWu0hj/8rTlO1kTKY/cDvX8GkoxASGug7sFs\nn8uSQ2AZ+s5pzlNO2g8aBAwdCtyjn69eKBENE4oaVg0zJyHxrSnA6Sq4sLYmDL6HHfXLwo4mwLeD\nkLKqLdzbrgWe/k/lLVU7CRS7CZjdYLxYFem7H4Z56dNArTCgaxA8Rn+DiJJONKzeAbi1W4XgSc+j\n1XDHay1oJVukPIsgaBCDGCzHcnhker+wTZS0/thTPYCvhwDNtgIvLAK2NstR4AQ4ikROyxdY2tsm\ndqYhDSEIsWu3bBlw6pQy4xQEoXBiSbrei73wpBfQ/0eVd/Rfe3j5JlvzlOyClRPVgI7/Ai8tAJpv\ngve56vBa8Brw1kylZ8VvAgYA7mYk3XsCqZ0WAr/0Bk5UBwAk1N2Cq7uqW7vT0rCxQ0pi9pTiSEmB\nA5YcKVuyyvO8q+gNSbn6Cxn2FgoIlmFuX/pmOb329b7lNDTYQ/e2IfQ8fT896Uk/+tFEkzVfwI9+\n9KSn02m76ZyumVvlLN8qM9GMppFG3eu9eZOsWpVcudL1z0wP5KNpuzv5in4JBQXbVAMjjXQf+TlR\nfzdxzddBE+ZyLo3pxej9zXCidAzdxn1C30R/B4+6zLqipYsD/tnA0mXSOX1DmFMNe+IJctEix+su\ntDlPd/oV8REKAnp5AL70tct5Sk4mv/iCLFOG/OHXa9xhVuIQzWgG3/pY/j2UoQxmsGYwZhGIIRyS\nIxM6LbLKGRg+nHzxRVc+rayR4EkQ8g4H/fqrC1E5gsYLVawvdbbacvky+UTrZNZ7/Dp3nb7soF+W\nPmdzNouzuKZ+GWnkfM7nXM6l1+pnaSgbRe9TD+pq2LRpZLdujtsLWs6TiI8gkHZBTuYfMAj2YR+r\nmOzdS9atqxzCz52z70cvwVxrVCirN7mcvnE5e3M7fFgFepmvN7eR4EkQch9N/TpckygTTex5mEM4\nxGEEOzxcjUQPGkSmpaltt6tfRhozRtcnDCAe20SjWVvDIiOVFqWnO96DjDyJ+AgFiMyC4UEPzWDm\nfEo0v/xSrVSbPZs0m+37cfbjn8u5Gct9s/G53Tcu68oam7fMtDTy0UfJqVNd9MBygARPgpC7aOpX\nQjGi1iFi5puaQcjevWT58valmRz0K91A752Pcfz063zh8wN0G/o1MfldYm89wuxEvdINRMOdNM3r\noathVauShw/r34vWKNndwJl+5ag8y50g5Q2E/IhWSRVPeCIVqXbtioc1xn1vrENAmeKYOROoVMmx\nL72SKguwAJ3R2f4cpx+AYUNLpOyuoxIu40oC3slAjaPAa3NgfGInzhiclz9wdk+2xnUTJwL//qsq\npbvl8RKR/Fae5XYR/RLyI7r69e73wHU/4I/XAYN9aafDh4GnngImTwa6dMnoy6pfF03A5H7ArDfh\nViIeTzX1wbrAWUhzSwbO3geseQqGYonwHDkSKZ3/0r6wlU/D8PF4XNpfHmUNjhrWtSvQrh3Qvbv2\nPekZb+Y1zvTrTh3GBaFAo7Vc1wgj3OCGZCQDZgPwwwe4MfozvDXGjIG9AYNOKKC11Nby717wQmJY\nIBDUFfj7RaRdKQPDk+uBxtuBp4OB0leARBO89j2C1F6/osMbN+D/+e0Jh/+tDwCEhwNjxgA7duR9\n4CQIQu6ipV8eIe2Q+l8HYH9dtToOGat5z51TQcuECfaBEwBUTAnEjfEfAhP7A6/OA9Y8Bc+ap/EW\nfkcovs14KSTgvfxFJA8cA6x9DJg4EPBIhyc84Q535Q7+9EaU/DAAJ7f7oeyjjtdduzZw5Ij2Pdnq\nV35G5FQo0mgFPGlIww/4Ad6RD8D9qfVw+/slfLdjGz5621c3cAIyluZ6IqM+VPpNb/w50wvXm4QA\nbVYDN4sBs96E98UqmBoUB6+BU4AO/wGPbofHk5swfGBxHNhcApun1cWBA3d2b6mpwBtvAF99BVSr\ndmd9CYKQ/3DQr0Qjkvp8j/emHYLpnhQ7m5PiN/3x3HNAv37Aa6/Z93PiBPDco/6os7U3vHc9DuOU\nQUDNcLjBDd3R3d4LygAY2i/HhB1b4HaoLtw/+gEArLYugzEYZwyRePtVPyxcqH3dVasCEREufBB3\nA735PFd/ITkDQj4l8zz7HPNcTvnjGkv4J7Pn2KO8mOaYsKhnIWDNG7hYjhg6iigTTbf2y/nesuU0\nphW3m8t3Zi3wwQfkmDHOz5UVX3xBPv20Y25WXgLJeRKEXMVWvzyGj2GTLpEkyTCGcTZnM4xhJFVJ\npm7dMvTAoiv/boxjuXLkjz+qfWEMoze97XTJk56auUjb48KJKqeIJR0dNGzbNrJePW39CgkhW7bM\n2+d0OzjTLxEfQWDGD/xYbAybvhJBQ63D9NnTXDNp0VnJliUR++jV9xfinlji3cnE8Wr0pa9VPGxF\nxNnS3G+/JQcMcH4uZ2zdSpYrR54/77pndDtI8CQIuU80o7n0zD6WLJXOM2ccdeODBZtYvToZH6/a\nW/YXX9uB8I/ikOC11r60dMmXvgxmsEMQFMpQFlvViXggXCWK22hYUhLpaUyl8WZJB/3auZNs0CBP\nH9FtIcGTIGSD9evJSvel0b3/FOJmxoiQ7UoVvRV1+89dZve+N+lbKpkeQ8YRUf52baZzusP5tPoy\n0shoRvOTT8ghIxNua+luXBwZGEguXpwrjylHSPAkCHlDjx7kp59q6EpMaaL8RS7fFkvSZv+uBsrK\nYF0LmmhiGMMYylCGMUzT605Pw4xmE/HwHmJVazuNimY0DTXCiUO1HPTrwAGyTp28fkI5x5l+Sc6T\nUORJTQU+/VStABk0/SR8Jg0FTEnW/bYlWSwJmlZiSyJ98Fg0rWvCHN9pwNEHga+HAmVj7M7xPt5H\nDOy3WXKkbEvAmGFGCEKwZw9Qpu4F+3NluhYtSODtt4FnnwU6dcrYbinXkPkaBEEo+Bw7pkovffKJ\nhkYNGQuvVxahTNMTANR+j+iKqpTUjD5Ayw0AgPqojzZog4ZoiEfwCBB3D7C6NfDfs8DJqhiAAZoa\n1s3QFfjfn8BClYFuKakSgQi433cBOHevtb1Fv5jDhav5Ub8keBKKNCdOAI89Bhw4AITsu4xaz0Y4\nLU5pTdBM9gK+/QiocRTp14vDfLAO0sZ9hPgyp5GGNIfzpCAFe7HXYft1XLdrn4IU9Ex4H9t3mNHp\niZI5LpT500/A0aPAt99mbAtCEAIQgDZogwAEIAhB2XgygiAUFMaNA97sdwPHSuyED3wydGNPfeC/\n9nD76kurbhSnDxK6T1EBzwv/AAASkYhkJOMariFx//1Y//z7QEAkMGaosi14bAtS2izDrkvn7M47\nAzPwK34FWocAG58AAPyCXxCDGAQiECwZC1zNqEBu0a/kZMDbO3v3lm/1S29IytVfyLC3kM/4/Xfl\ndDtpEjnHnJEj4ElPetGLvvSlN73thqvnmOfS/e+XiKoniI5L6HnkIY7kSE1X8syfYAbbnT+a0Q6J\nmSDoMecNPtoujmTOTOP27lX3c/So/TnupmsvZNpOEHKVCxfI4iWTaIy515pbZKmr6f70KnpOfd+q\nG3M5l56/9KWh4W4ixYMmmuhNb6URZhDjPyL8o4jv3ydu2OhGigfdR3zF+wLSGBOjzmunX8mehFcS\nkaIMhkdyJEmyWbfT9PzjTQf9WrWKfOqprO8tP+uXiI9Q5Lh+nfzf/8iaNcn9+7V/oB70oDe97Wra\nbTp8hW5PrSHqHCBWP0VLjpJejkDm1SqZf/ChDNWuF9ViHSfMP2ttl53VdlevktWrk3Pm2G+/2/Wi\nJHgShNzlo88T6P7ODAe98drxOA33naF3sm/G6t7YCkTZS8S+ugRBb3pzMzervKWB36rcpcj7NDVs\nOqezf3+yf3913lCG2tfrLHuJuFCetgHOSy+RP8275qBff/xBdu2a9b3lZ/2SaTuhSLF3L9CwIWA0\nAjt3AnXrAnuxF26ZfgppSEMykhGPeCTGu+ONQVHo0MIHXs8FA3vrA63XAFDmlwlIwEzMhAkm+MEP\nnvC0y2PygAd+w29W4zfL/L0PfByn+HY1BE5Vw6PPX7Ju8oc/GqOxrnEcCfTsCbRpA3TrZr9Py8cq\nq6k/QRAKBunpwG+/usPrnZl221ORipTx74ODxiPZKx690At7sRf8ZjDQaQlQT5nIecMbXvDCixO3\nwLCmDXzXdoap8mW0QRu7/nqhF/qgDwYPBv6cY8aW5F2O+lXsJpBoApCR23TtGnBfCT8H/Tp7Frjv\nvqzvL1/rl15U5eov5M1NuIuYzcrHxN+fDArK2D6Xc/ULXppBLHyBqHSWnt3/5PyodU6HkC0VyZ21\nybyEuCd72p+z8yJ6fv+R3VtaViNP33xDNm5MJiVp3/vdrBcFGXkShFxjSPBaGhrscdSucxWJkleI\n6z7W0ZoFV9aobWfutdOmNXuvsEwZcnfEZd3VdrY1Og11DtJn9xPW6UGrflY8p85r0/6hh8g1e2Id\n9KtHD3LGjOzdY37VLxEfodATG0t27qx8RY4fz9gezeiMSuCZPxGVifZLiZqHiQ3N7cTD2Q/Z2TCz\n3vz9eI6nN71ZbEdLouJ5zr4539pfVj5PISHKzyky0vkzuF2jzTtFgidByB2iGU331/8kfujvqF9f\nf0L0zpjKM9HEz8fFs/kbp+z0a455Lps1sy8QrKdh1hfDjkuIfzpZ+w1jGL8yjyS8E+l7o5xVp8xm\n0uiTQmNceQf9atSI3Lw5Z/ea3/RLxEco1GzfrjyP3n9fjczY/giDGewoOmluKlmydAwx8jMWTy7p\nELQ4+yE7S3DUM5+bzdk8bA5j/SeuceLP17PVF0lGRKjK6GvW5P5zvF0keBIE12LRkv9SVikz3lt5\nRnafuvuIDc0JqrzMOea5fPBBFbDY6tfateSDD5Jpafb9a+lOMIOVfrVfSix+zi6oWnZuL0uXTbXT\nxV2nLxMVLjj0czYpmsWKZRh25mckeBKKHGYzOXGimqZbtEhtyzyKM4RD7AXnUC3ikW1Ei3XE0fut\ngU1O33ZsR6eMNHIkR1pN47QSy4uzOD3nv8bKdWPtRMzZKNaNG2T9+uSECS58aLmABE+C4DpsNcxz\nXRuicahj4HSiKlH+ApFuYHEWZzCDuX8/GRDgWKrp1VdVOoPeeWw1zDqdV3cfsbMhQZWY7k1vFvuv\nC92eWmP3kvn1guP06LDCQb9+3X6Y9erl7nNyFc70SxLGhULH1avACy8AQUHAjh3A88+rJO1e6IVE\nJCovEyTie3yvivimegCjhwIt1wM9ZgNrnwQeOI40pKEJmiACETkyZ+uKrohEJN7BOyCIcRiHAAQg\nBCH4Dt/B+9bHwo14A1I/+hqXpnRBrHvGefSSJQMYiN69VWXyAQPu9GkJglAQyKxhqatbwNAmxLFh\n8NNAu5WAG5GOdADAguUJ6NgRdoXNk5OB5cuBl1927EJLwxqiIV5KeBM4UR3edZThZipSkYxk3Nxc\nH+ZHt6AXelm18sSGSsDjm+36TUUqIjdVxmOPueaZ3E0keBIKFXv2qNV0994LbNoEVKmitju47kKt\nlOt84HPgkR3A5seBPQ2AvjMAN8Ib3uiFXmiIhjkyZ4tBDFZhFUZhFL7BNxkr9pCI7uiOARgAT3gi\nGckZBw0bBbRZDa/HQ+3cwy0O5JZVfJbq6L9+449jx5Qhpq0YCoJQeHHQsLVPwrv1JvUCaMuGFvBq\ntRWe8IQZZryMlzFm02Z4tNpk1+zQISAgAChbNmObZSXwERzBREx00LDfV0bB7bHtSDZesz/nynZA\nm9V2FRA2BpvwVdvHHfRr22oftG7twgdzt9AbknL1FzLsLbiQzHlHZjP500/KJHLePO32dlNmqe70\nGP05S5ZJpcfMt9XKulsfi/dJTs3Z5nKufgK63mdrUzXEfrkUvejFYAY7nMP2XpcsIStVIs+e1bmI\nfAZk2k4QHLidBGg7DbtpJIol0PtGSQedMgSe5nfhy+23VzhP74gH7M63YAH5/PMZ/Vum6px61j27\njJjV3X7biarK4ynVnd70ZhjDGBamdCo93f5er10jfX3Ja9dc+TRzD2f6JSNPQoEjs13/7Jt/4c03\ngR9+ADZvBl55xfEY21Gc4sfqw/D4VtRY+w727/HA7z1bwmTIeDuahVnwuvWxxVlduSM4gh7ogVSk\nZv9GEo1qmvDH/kDpWBDEy3jZOspleQsEgMZojIsH/NGrF7BokRpZEwSh4HG75UbsNOxgUxgeOIFZ\nxabYjU4b4/3hGXUvmlYvk6FfN4oBcSXhVfmSnX7duAEUL67+PoIjeBNvIvHWR5OtjwIH6gKvzLff\n/mtP4NV5gEc63OCGhmiIYfMPoksX4IpbDCIQgUAEwh/+WLoUaN4c8PPL4UPLj+hFVa7+Qt7cBBfg\nMIJ0vBoNdffzhW6JTEhwfqzZTI6dcp0lSqfw68nXmZ5u36/tm6CzlW6WtpYq5NM5XbPMSpafD76j\n26vz6EUvhxErL3rRSKM1uX3apUUMDHR0EM/vQEaeBMGKK8qNRDOaw2ae4kuvJ9ptC2UoQ3bH8qGH\nMp3nRFUi8JSDJ903i46xVcfrHMmRWetXigdRby/xZzd7nbpxD1H2Ej3Ca2dsTXOjISCCQ/cscLBZ\n6dBBlcUqKDjTLxEfoUBhtwJt8XOEfxSNUwZyh9m5Xf/Fi+QzzygzyfDw7J3LMozte7MsvVZ2ZOdh\nB9mgywka2q6ie+9fiMM19Q02s/qsak1UOktcKcn3+b7z2ng3jTQ03c6Bw7OIDvMhEjwJQgauKjfy\nySfkqFGO25csIdu3V39b9Kv4gaY01D5kLdEykiNpoonex2srY8t0g3OtMoPoO1X5O5kz7Zv4Ias9\nv8/+nhY/R7dHQh0CMuOlAPqVSOf1647XnV9xpl8ybScUKAIRiOT0NGDoaKD/j8DSjjC8Ow1VDIG6\nx/z7L1C/PtCoEbBlC1CjRtbnMZuBUsFd8fSrsTCXu4AGoxciBcnY8+Jn4AffIb3KCaDFBiT920a3\nDze4OSZzAkBMGeDNWcBv3YFScZiO6Q6r6jIuxAD0mA1DYCRe+TIs6wsXBCHf4qpyI5GRKtk7M7Gx\nQOnS6m/LirmZ7j+heroSvftwH4ZjOBKRiORqh4Hyl4AlnTTP4QlPpT/DRgHbHgX+/B9gu0AltiQw\ndggiv+qRcU8E8O0guA34AQbYr2ZJ+/V1tHjxCnx9c3Sr+Re9qMrVX8ibm+ACYmLIOq0v0u3JtfSJ\nqurUrv/GDbJvX2WSmV0324QEctIkslo15aM0ZQp5+fItN1+62791zX1VGcbpfIw0cjqn2zn6uqV7\nqKTLj8da2/nQh0M4xFqI2G40a+gootlmIlElsRc0ICNPgmCHK8qNtGqlqgtkZupUsk8f+20XL5Kl\ny6RrL2ZZ00qNgEdUdtjndbYqa3c+RrdHt9HnUjWaaLLXwLd+IvpNstMv05r2NNx/jGNTv7XvLcWD\nuPcM/9578jaf2t3BmX7JyJNQYNizR40ePdugPM4F18HasvMQiUh0RVeHtgcOqLbXrwP79iFLX5H4\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f7423822650>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy.stats import multivariate_normal\n",
    "\n",
    "sz = 100\n",
    "\n",
    "tt1 = multivariate_normal.rvs(cov=np.array([[2,1], [1,2]]), \n",
    "                              size=sz)\n",
    "x1, y1 = tt1[:,0], tt1[:,1]\n",
    "\n",
    "tt2 = multivariate_normal.rvs(mean = np.array([8, 8]),\n",
    "                              cov=np.array([[1,0.5], [0.5,2]]), \n",
    "                              size=sz)\n",
    "x2, y2 = tt2[:,0], tt2[:,1]\n",
    "\n",
    "fig, axes = plt.subplots(1, 2, figsize=(10, 4))\n",
    "\n",
    "m1 = np.mean(tt1, axis=0)\n",
    "c1 = np.dot((tt1 - m1).T, (tt1 - m1)) / sz\n",
    "\n",
    "m2 = np.mean(tt2, axis=0)\n",
    "c2 = np.dot((tt2 - m2).T, (tt2 - m2)) / sz\n",
    "\n",
    "tt = np.vstack([tt1, tt2])\n",
    "\n",
    "m = np.mean(tt, axis=0)\n",
    "c = np.dot((tt - m).T, (tt - m)) / sz / 2\n",
    "\n",
    "x, y = np.mgrid[-5:12:0.1, -5:12:0.1]\n",
    "\n",
    "z1 = bivariate_normal(x, y, \n",
    "                      mux=m1[0], \n",
    "                      muy=m1[1], \n",
    "                      sigmax=np.sqrt(c1[0][0]),\n",
    "                      sigmay=np.sqrt(c1[1][1]),\n",
    "                      sigmaxy = c1[1][0])\n",
    "\n",
    "z2 = bivariate_normal(x, y, \n",
    "                      mux=m2[0], \n",
    "                      muy=m2[1], \n",
    "                      sigmax=np.sqrt(c2[0][0]),\n",
    "                      sigmay=np.sqrt(c2[1][1]),\n",
    "                      sigmaxy = c2[1][0])\n",
    "\n",
    "z = bivariate_normal(x, y, \n",
    "                     mux=m[0], \n",
    "                     muy=m[1], \n",
    "                     sigmax=np.sqrt(c[0][0]),\n",
    "                     sigmay=np.sqrt(c[1][1]),\n",
    "                     sigmaxy = c[1][0])\n",
    "\n",
    "axes[0].contour(x, y, z, 4, colors='b')\n",
    "axes[1].contour(x, y, z1, 4, colors='b')\n",
    "axes[1].contour(x, y, z2, 4, colors='b')\n",
    "\n",
    "for ax in axes:\n",
    "    ax.scatter(x1, y1, color='lime')\n",
    "    ax.scatter(x2, y2, color='lime')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "但我们可以使用多个高斯分布的混合来模拟多峰模型。\n",
    "\n",
    "高斯分布的一个简单线性混合就能产生十分复杂的分布，如图所示，红线是三个高斯分布线性组合后的概率密度，蓝线是三个高斯分布按相应比例进行缩放后的概率密度："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f7423818a10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "xx = np.linspace(-20, 20, 200)\n",
    "\n",
    "y1 = norm.pdf(xx, loc=0, scale=4)\n",
    "y2 = norm.pdf(xx, loc=10, scale=1.5)\n",
    "y3 = norm.pdf(xx, loc=-8, scale=2)\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "\n",
    "ax.plot(xx, y1, 'b')\n",
    "ax.plot(xx, y2, 'b')\n",
    "ax.plot(xx, y3, 'b')\n",
    "\n",
    "ax.plot(xx, y1 + y2 + y3, 'r')\n",
    "\n",
    "ax.set_xticks([])\n",
    "ax.set_yticks([])\n",
    "\n",
    "ax.set_xlabel(\"$x$\", fontsize=\"xx-large\")\n",
    "ax.set_ylabel(\"$p(x)$\", fontsize=\"xx-large\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "考虑 $K$ 个高斯分布的线性组合，即高斯混合分布（`mixture of Gaussians`）：\n",
    "\n",
    "$$\n",
    "p(\\mathbf x) = \\sum_{k=1}^K \\pi_k \\mathcal N(\\mathbf x|\\mathbf \\mu_k, \\mathbf \\Sigma_k) \n",
    "$$\n",
    "\n",
    "其中 $\\mathcal N(\\mathbf x|\\mathbf \\mu_k, \\mathbf \\Sigma_k)$ 是一个高斯分布，是混合分布的一个组分（`component of the mixture`）。\n",
    "\n",
    "考虑概率分布的归一性 $\\int p(\\mathbf x) d\\mathbf x = 1$：\n",
    "\n",
    "$$\n",
    "\\sum_{k=1}^K \\pi_k = 1\n",
    "$$\n",
    "\n",
    "同时考虑非负性 $p(\\mathbf x) \\geq 0$：\n",
    "\n",
    "$$\n",
    "\\forall k, \\pi_k \\geq 0\n",
    "$$\n",
    "\n",
    "于是我们有：\n",
    "\n",
    "$$\n",
    "0 \\leq \\pi_k \\leq 1\n",
    "$$\n",
    "\n",
    "另一方面，我们有：\n",
    "\n",
    "$$\n",
    "p(\\mathbf x) = \\sum_{k=1}^N p(k) p(\\mathbf x|k)\n",
    "$$\n",
    "\n",
    "从而我们可以认为 $\\pi_k = p(k)$ 是第 $k$ 个组分的先验分布，$p(\\mathbf x|k)$ 是给定 $k$ 下的条件分布。\n",
    "\n",
    "从而我们可以计算 $k$ 的后验分布：\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\gamma_k(\\mathbf x) & = p(k|\\mathbf x) \\\\\n",
    "& = \\frac{p(k) p(\\mathbf x|k)}{\\sum_{k=1}^N p(k) p(\\mathbf x|k)} \\\\\n",
    "& = \\frac{\\pi_k \\mathcal N(\\mathbf x|\\mathbf \\mu_k, \\mathbf \\Sigma_k) }{\\sum_{k=1}^K \\pi_k \\mathcal N(\\mathbf x|\\mathbf \\mu_k, \\mathbf \\Sigma_k) }\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "其参数为 $\\bf \\pi, \\mu, \\Sigma$，其中 $\\mathbf \\pi = {\\pi_1, \\dots, \\pi_n}, \\mathbf \\mu = \\{\\mathbf\\mu_1,\\dots,\\mathbf\\mu_n\\}, \\mathbf\\Sigma=\\{\\mathbf\\Sigma_1,\\dots,\\mathbf\\Sigma_n\\}$。\n",
    "\n",
    "对于数据 $\\mathbf X=\\{\\mathbf x_1,\\dots,\\mathbf x_n\\}$，似然函数为\n",
    "\n",
    "$$\n",
    "\\ln p(\\mathbf{X|\\pi, \\mu, \\Sigma}) = \\sum_{n=1}^N \\ln \\left\\{ \\sum_{k=1}^K \\pi_k \\mathcal N(\\mathbf x_n|\\mathbf \\mu_k, \\mathbf \\Sigma_k) \\right\\}\n",
    "$$\n",
    "\n",
    "其最大似然解比较复杂，没有显式的表示形式，可以用数值法求解，或者用 EM 算法求解。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
